umami-compass 0.1.3 → 0.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 (57) hide show
  1. package/README.md +16 -7
  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 +162 -0
  12. package/dist/mcp/insights-utils.d.ts.map +1 -0
  13. package/dist/mcp/insights-utils.js +377 -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 +6 -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 +754 -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 +11 -11
  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/result.d.ts +13 -1
  44. package/dist/mcp/result.d.ts.map +1 -1
  45. package/dist/mcp/result.js +88 -2
  46. package/dist/mcp/result.js.map +1 -1
  47. package/dist/mcp/schemas.d.ts +122 -0
  48. package/dist/mcp/schemas.d.ts.map +1 -1
  49. package/dist/mcp/schemas.js +24 -0
  50. package/dist/mcp/schemas.js.map +1 -1
  51. package/dist/server.d.ts.map +1 -1
  52. package/dist/server.js +165 -31
  53. package/dist/server.js.map +1 -1
  54. package/dist/version.d.ts +1 -1
  55. package/dist/version.js +1 -1
  56. package/package.json +1 -1
  57. package/server.json +9 -4
package/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  Umami Compass is a secure, read-only [Model Context Protocol](https://modelcontextprotocol.io/) server for [Umami Analytics](https://umami.is/). It gives MCP clients accurate Umami 3.2 analytics without exposing a database or allowing arbitrary network requests.
14
14
 
15
- Version `0.1.3` is the current patch release. See [Compatibility](#compatibility) before using it with older Umami versions.
15
+ Version `0.2.0` is the current source release. See [Compatibility](#compatibility) before using it with older Umami versions.
16
16
 
17
17
  > The `npx` examples follow the stable npm release channel and check it whenever the MCP process starts. For source-based evaluation, clone this repository, run `pnpm install --frozen-lockfile && pnpm build`, and use `node /absolute/path/to/umami-compass/dist/cli.js` as the MCP command.
18
18
 
@@ -23,8 +23,9 @@ Existing Umami MCP servers each cover part of the problem, but our July 2026 rev
23
23
  - Correct auth for both products: `x-umami-api-key` for Umami Cloud and Bearer/login auth for self-hosted instances.
24
24
  - Umami 3.2-aware responses, including both `pageviews` and `sessions`, Core Web Vitals, funnels, journeys, attribution, retention, revenue, bounded heatmaps, and replay metadata.
25
25
  - Read-only by construction: every tool declares MCP safety annotations; no create, update, delete, raw HTML, or arbitrary URL tool exists.
26
- - Defense in depth: fixed upstream origin, HTTPS policy, website allowlist, range/page/response-byte caps, request timeout, cancellation propagation, and redacted errors.
27
- - Agent-friendly output: machine-readable `structuredContent`, bounded pages/series/activity/heatmaps, clear descriptions, a resource, and an analytics prompt.
26
+ - Defense in depth: fixed upstream origin, HTTPS policy, website and team allowlists, range/page/response-byte caps, request timeout, cancellation propagation, and redacted errors.
27
+ - Decision-ready insights: bounded portfolio overviews, traffic-change evidence, release-impact analysis, tracking-health audits, and website resolution without arbitrary API access.
28
+ - Agent-friendly output: machine-readable `structuredContent`, a common status/range/truncation envelope, two resources, and six guided prompts.
28
29
  - Contributor-friendly architecture: endpoint modules, dependency-injected HTTP, a central access policy, ADRs, and real MCP integration tests.
29
30
 
30
31
  See the dated [landscape review](docs/research/umami-mcp-landscape-2026-07.md) for the evidence and methodology.
@@ -41,7 +42,7 @@ npx --yes --prefer-online umami-compass@latest
41
42
 
42
43
  `@latest` selects the stable npm channel and `--prefer-online` makes npm check the registry even when package metadata is cached. npm still reuses the cached package when that exact release is already present. Updates take effect the next time the MCP process starts; an already running local server cannot replace itself.
43
44
 
44
- Use `umami-compass@next` instead to opt into preview releases. For reproducible CI or centrally managed environments, pin an exact release and omit the online check, for example `npx --yes umami-compass@0.1.3`. Never use the preview channel for an unattended production setup.
45
+ Use `umami-compass@next` instead to opt into preview releases. For reproducible CI or centrally managed environments, pin an exact release and omit the online check, for example `npx --yes umami-compass@0.2.0`. Never use the preview channel for an unattended production setup.
45
46
 
46
47
  ### Umami Cloud
47
48
 
@@ -84,15 +85,18 @@ With `UMAMI_API_KEY` and no URL, the API root defaults to `https://api.umami.is/
84
85
 
85
86
  `UMAMI_WEBSITE_IDS` is an optional safety allowlist, not a credential. Replace the example UUID with a website ID from Umami (or from `list_websites`), separate multiple IDs with commas, or remove the variable to discover every website visible directly or through a team membership.
86
87
 
88
+ `UMAMI_TEAM_IDS` is a strict team boundary for discovery and direct website/report access. When it is set, user-owned websites without one of the selected team IDs are excluded. If `UMAMI_WEBSITE_IDS` is also set, a website must pass both allowlists.
89
+
87
90
  Do not commit real credentials. Prefer a dedicated view-only Umami account and the client/OS secret store when available.
88
91
 
89
92
  ## Tools
90
93
 
91
- The least-privilege default `core` set exposes seven aggregate tools. Row-level events, sessions, and other more sensitive modules are opt-in.
94
+ The least-privilege default enables `core,insights`: seven primitive aggregate tools plus five decision-ready aggregate workflows. Row-level events, sessions, replay, heatmaps, and other more sensitive modules remain opt-in.
92
95
 
93
96
  | Toolset | Tools | Default |
94
97
  | --- | --- | --- |
95
98
  | `core` | `list_websites`, `get_website`, `get_website_stats`, `get_pageviews`, `get_metrics`, `get_active_visitors`, `get_website_date_range` | Yes |
99
+ | `insights` | `resolve_website`, `get_portfolio_overview`, `explain_traffic_change`, `analyze_release_impact`, `tracking_health_check` | Yes |
96
100
  | `events` | `list_events`, `get_event_stats`, `get_event_series` | No |
97
101
  | `sessions` | `list_sessions`, `get_session_stats`, `get_session`, `get_session_activity` | No |
98
102
  | `performance` | `get_web_vitals`, `get_performance_breakdown` for LCP, INP, CLS, FCP, and TTFB | No |
@@ -101,7 +105,11 @@ The least-privilege default `core` set exposes seven aggregate tools. Row-level
101
105
  | `replay` | `list_replays` (metadata only; never raw rrweb payloads) | No |
102
106
  | `heatmaps` | `get_heatmap` (click/scroll pages and bounded detail points) | No |
103
107
 
104
- Set `UMAMI_TOOLSETS=all` or a comma-separated subset. The default has seven tools; `all` has 30. High-cardinality report, performance, heatmap, and activity results carry explicit limits and truncation metadata. The server also exposes the `umami://websites` resource and the `analytics_report` prompt.
108
+ Set `UMAMI_TOOLSETS=all` or a comma-separated subset. The default has 12 aggregate tools; `all` has 35. Multi-website insights are bounded to 50 websites with four concurrent website workers. High-cardinality report, performance, heatmap, and activity results carry explicit limits and truncation metadata.
109
+
110
+ Successful tool responses preserve the existing `data` field and add a common `meta` envelope. Depending on the request it includes `dataStatus`, `emptyReason`, `websiteId`, `requestedRange`, `timezone`, and `truncated`, allowing clients to distinguish a valid empty range from a disabled feature or a truncated result.
111
+
112
+ The server exposes `umami://websites` and the sanitized `umami://capabilities` resource. Guided prompts cover an analytics report, weekly portfolio briefing, traffic investigation, release impact, tracking health, and conversion audit; each prompt is registered only when its required toolset is enabled. Scheduling a recurring briefing remains the MCP client's responsibility; the local stdio server does not run a background scheduler or send messages.
105
113
 
106
114
  ## Configuration
107
115
 
@@ -120,7 +128,8 @@ Authentication variables have no default. Configure only one of the three modes
120
128
  - `UMAMI_URL` — self-hosted instance origin; `/api` is appended. With API-key auth and no URL, the default is the Umami Cloud API root.
121
129
  - `UMAMI_API_URL` — exact API root; takes the place of `UMAMI_URL`. No default.
122
130
  - `UMAMI_WEBSITE_IDS` — comma-separated website UUID allowlist. Defaults to every site visible directly or through a team membership.
123
- - `UMAMI_TOOLSETS` — comma-separated toolsets or `all`. Available values are `core`, `events`, `sessions`, `performance`, `reports`, `revenue`, `replay`, and `heatmaps`. Defaults to `core`.
131
+ - `UMAMI_TEAM_IDS` — comma-separated strict team UUID allowlist for discovery and direct website/report access; at most 25 IDs. User-owned websites are excluded while it is set, and `UMAMI_WEBSITE_IDS` is intersected when both are configured.
132
+ - `UMAMI_TOOLSETS` — comma-separated toolsets or `all`. Available values are `core`, `insights`, `events`, `sessions`, `performance`, `reports`, `revenue`, `replay`, and `heatmaps`. Defaults to `core,insights`.
124
133
 
125
134
  ### Safety limits
126
135
 
package/SECURITY.md CHANGED
@@ -15,12 +15,12 @@ You should receive an acknowledgement within 72 hours. We aim to provide an init
15
15
  Umami Compass is a local stdio process. It connects only to the single Umami API root configured at process start.
16
16
 
17
17
  - No tool accepts an upstream URL, fetches arbitrary HTML, or changes the API root.
18
- - No mutation tool is shipped in `v0.1`.
18
+ - No mutation tool is shipped in `v0.2`.
19
19
  - API keys, access tokens, usernames, and passwords are never returned or intentionally logged.
20
20
  - Upstream response bodies are not copied into errors.
21
21
  - Redirects are rejected to prevent credentials from being forwarded to another origin.
22
22
  - Non-loopback HTTP is rejected unless explicitly allowed.
23
- - Website allowlists, bounded pages/date ranges/decoded response bodies, request timeouts, and MCP cancellation limit access and resource use.
23
+ - Website and team allowlists, bounded pages/date ranges/decoded response bodies, request timeouts, and MCP cancellation limit access and resource use.
24
24
  - Raw session replay event streams are excluded because they can be large and privacy-sensitive.
25
25
 
26
26
  The MCP host is part of the trust boundary: it launches the process, supplies secrets, chooses which model receives results, and may log tool calls. Use a trusted host and a dedicated read-only Umami identity.
@@ -6,6 +6,7 @@ export declare class UmamiClient {
6
6
  constructor(config: UmamiCompassConfig, fetchImplementation?: Fetch);
7
7
  isWebsiteAllowed(websiteId: string): boolean;
8
8
  assertWebsiteAllowed(websiteId: string): void;
9
+ assertWebsiteAccessible(websiteId: string, signal?: AbortSignal): Promise<void>;
9
10
  listWebsites(query: Query, signal?: AbortSignal): Promise<PagedResponse<Website> | unknown>;
10
11
  getWebsite(websiteId: string, signal?: AbortSignal): Promise<Website>;
11
12
  get<T = unknown>(path: string, query?: Query, signal?: AbortSignal): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,KAAK,EACV,oBAAoB,EAEpB,aAAa,EACb,KAAK,EACL,qBAAqB,EAErB,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,KAAK,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AA8L5C,qBAAa,WAAW;;IAOtB,YAAY,MAAM,EAAE,kBAAkB,EAAE,mBAAmB,GAAE,KAAwB,EAGpF;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3C;IAED,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAO5C;IAEK,YAAY,CAChB,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAkD3C;IAiCK,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAU1E;IAEK,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAEpF;IAEK,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAChC,OAAO,EAAE,oBAAoB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC,CAEZ;IAEK,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAqB7F;CAgIF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,KAAK,EACV,oBAAoB,EAEpB,aAAa,EACb,KAAK,EACL,qBAAqB,EAErB,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,KAAK,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AA8L5C,qBAAa,WAAW;;IAQtB,YAAY,MAAM,EAAE,kBAAkB,EAAE,mBAAmB,GAAE,KAAwB,EAGpF;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3C;IAED,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAO5C;IAEK,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;IAEK,YAAY,CAChB,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAY3C;IAkGK,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAU1E;IAEK,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAMpF;IAEK,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAChC,OAAO,EAAE,oBAAoB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC,CAEZ;IAEK,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAqB7F;CAyJF"}
@@ -135,6 +135,7 @@ export class UmamiClient {
135
135
  #loginGeneration = 0;
136
136
  #loginPromise;
137
137
  #loginToken;
138
+ #teamWebsiteIdsPromise;
138
139
  constructor(config, fetchImplementation = globalThis.fetch) {
139
140
  this.#config = config;
140
141
  this.#fetch = fetchImplementation;
@@ -147,21 +148,53 @@ export class UmamiClient {
147
148
  throw new UmamiError("FORBIDDEN", "This website is outside the configured UMAMI_WEBSITE_IDS allowlist.");
148
149
  }
149
150
  }
151
+ async assertWebsiteAccessible(websiteId, signal) {
152
+ this.assertWebsiteAllowed(websiteId);
153
+ await this.#assertTeamWebsiteAllowed(websiteId, signal);
154
+ }
150
155
  async listWebsites(query, signal) {
151
156
  const requestedPage = typeof query.page === "number" ? query.page : 1;
152
157
  const requestedPageSize = typeof query.pageSize === "number" ? query.pageSize : 20;
153
158
  const search = typeof query.search === "string" ? query.search : undefined;
159
+ const visible = await this.#discoverWebsites(search, signal);
160
+ const start = (requestedPage - 1) * requestedPageSize;
161
+ return {
162
+ data: visible.slice(start, start + requestedPageSize),
163
+ count: visible.length,
164
+ page: requestedPage,
165
+ pageSize: requestedPageSize,
166
+ };
167
+ }
168
+ async #discoverWebsites(search, signal) {
154
169
  const budget = { websitePages: 0 };
155
- const websites = await this.#listAllWebsitePages("websites", { includeTeams: true, page: 1, pageSize: DISCOVERY_PAGE_SIZE, search }, budget, signal);
156
- const teamPage = requireTeamPage(await this.get("teams", { page: 1, pageSize: DISCOVERY_PAGE_SIZE }, signal));
157
- if (teamPage.count > MAX_DISCOVERY_TEAMS) {
158
- throw new UmamiError("VALIDATION_ERROR", `The account belongs to more than ${MAX_DISCOVERY_TEAMS} teams, so website discovery was stopped safely. Use UMAMI_WEBSITE_IDS or a more limited Umami identity.`);
170
+ const websites = this.#config.teamIds
171
+ ? []
172
+ : await this.#listAllWebsitePages("websites", {
173
+ includeTeams: true,
174
+ page: 1,
175
+ pageSize: DISCOVERY_PAGE_SIZE,
176
+ search,
177
+ }, budget, signal);
178
+ let teams;
179
+ if (this.#config.teamIds) {
180
+ teams = [...this.#config.teamIds].map((id) => ({ id }));
159
181
  }
160
- if (teamPage.data.length < teamPage.count) {
161
- throw new UmamiError("INVALID_RESPONSE", "Umami returned an incomplete team list.");
182
+ else {
183
+ const teamPage = requireTeamPage(await this.get("teams", { page: 1, pageSize: DISCOVERY_PAGE_SIZE }, signal));
184
+ if (teamPage.count > MAX_DISCOVERY_TEAMS) {
185
+ throw new UmamiError("VALIDATION_ERROR", `The account belongs to more than ${MAX_DISCOVERY_TEAMS} teams, so website discovery was stopped safely. Use UMAMI_TEAM_IDS, UMAMI_WEBSITE_IDS, or a more limited Umami identity.`);
186
+ }
187
+ if (teamPage.data.length < teamPage.count) {
188
+ throw new UmamiError("INVALID_RESPONSE", "Umami returned an incomplete team list.");
189
+ }
190
+ teams = teamPage.data;
162
191
  }
163
- for (const team of teamPage.data) {
164
- websites.push(...(await this.#listAllWebsitePages(`teams/${encodeURIComponent(team.id)}/websites`, { page: 1, pageSize: DISCOVERY_PAGE_SIZE, search }, budget, signal)));
192
+ for (const team of teams) {
193
+ const teamWebsites = await this.#listAllWebsitePages(`teams/${encodeURIComponent(team.id)}/websites`, { page: 1, pageSize: DISCOVERY_PAGE_SIZE, search }, budget, signal);
194
+ websites.push(...teamWebsites.map((website) => ({
195
+ ...website,
196
+ teamId: website.teamId ?? team.id,
197
+ })));
165
198
  }
166
199
  const unique = new Map();
167
200
  for (const website of websites) {
@@ -169,14 +202,12 @@ export class UmamiClient {
169
202
  if (!unique.has(key))
170
203
  unique.set(key, website);
171
204
  }
172
- const visible = [...unique.values()].filter((website) => !this.#config.websiteIds || this.#config.websiteIds.has(website.id.toLowerCase()));
173
- const start = (requestedPage - 1) * requestedPageSize;
174
- return {
175
- data: visible.slice(start, start + requestedPageSize),
176
- count: visible.length,
177
- page: requestedPage,
178
- pageSize: requestedPageSize,
179
- };
205
+ return [...unique.values()].filter((website) => {
206
+ const websiteAllowed = !this.#config.websiteIds || this.#config.websiteIds.has(website.id.toLowerCase());
207
+ const teamAllowed = !this.#config.teamIds ||
208
+ (website.teamId != null && this.#config.teamIds.has(website.teamId.toLowerCase()));
209
+ return websiteAllowed && teamAllowed;
210
+ });
180
211
  }
181
212
  async #listAllWebsitePages(path, query, budget, signal) {
182
213
  this.#reserveDiscoveryPages(budget, 1);
@@ -198,10 +229,14 @@ export class UmamiClient {
198
229
  }
199
230
  async getWebsite(websiteId, signal) {
200
231
  const normalizedWebsiteId = websiteId.toLowerCase();
201
- this.assertWebsiteAllowed(normalizedWebsiteId);
202
- return requireWebsite(await this.get(`websites/${encodeURIComponent(normalizedWebsiteId)}`, undefined, signal));
232
+ await this.assertWebsiteAccessible(normalizedWebsiteId, signal);
233
+ return requireWebsite(await this.#request(`websites/${encodeURIComponent(normalizedWebsiteId)}`, { method: "GET", signal }, true));
203
234
  }
204
235
  async get(path, query, signal) {
236
+ const websiteMatch = /^websites\/([0-9a-f-]{36})(?:\/|$)/i.exec(path);
237
+ if (websiteMatch?.[1]) {
238
+ await this.assertWebsiteAccessible(websiteMatch[1], signal);
239
+ }
205
240
  return this.#request(path, { method: "GET", query, signal }, true);
206
241
  }
207
242
  async getHeatmapReport(request, signal) {
@@ -222,9 +257,31 @@ export class UmamiClient {
222
257
  if (!allowedTypes.has(request.type)) {
223
258
  throw new UmamiError("CONFIGURATION_ERROR", "Unsupported read-only Umami report type.");
224
259
  }
225
- this.assertWebsiteAllowed(request.websiteId);
260
+ await this.assertWebsiteAccessible(request.websiteId, signal);
226
261
  return this.#request(`reports/${request.type}`, { body: request, method: "POST", signal }, true);
227
262
  }
263
+ async #assertTeamWebsiteAllowed(websiteId, signal) {
264
+ if (!this.#config.teamIds)
265
+ return;
266
+ const normalizedWebsiteId = websiteId.toLowerCase();
267
+ let discovery = this.#teamWebsiteIdsPromise;
268
+ if (!discovery) {
269
+ discovery = this.#discoverWebsites(undefined, signal).then((websites) => new Set(websites.map((website) => website.id.toLowerCase())));
270
+ this.#teamWebsiteIdsPromise = discovery;
271
+ }
272
+ let allowedIds;
273
+ try {
274
+ allowedIds = await discovery;
275
+ }
276
+ catch (error) {
277
+ if (this.#teamWebsiteIdsPromise === discovery)
278
+ this.#teamWebsiteIdsPromise = undefined;
279
+ throw error;
280
+ }
281
+ if (!allowedIds.has(normalizedWebsiteId)) {
282
+ throw new UmamiError("FORBIDDEN", "This website is outside the configured UMAMI_TEAM_IDS allowlist.");
283
+ }
284
+ }
228
285
  async #request(path, options, retryLogin) {
229
286
  const url = resolveApiPath(this.#config.apiUrl, path);
230
287
  appendQuery(url, options.query);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const TOOLSETS: readonly ["core", "events", "sessions", "performance", "reports", "revenue", "replay", "heatmaps"];
1
+ export declare const TOOLSETS: readonly ["core", "insights", "events", "sessions", "performance", "reports", "revenue", "replay", "heatmaps"];
2
2
  export type Toolset = (typeof TOOLSETS)[number];
3
3
  export type UmamiAuth = {
4
4
  type: "apiKey";
@@ -19,6 +19,7 @@ export interface UmamiCompassConfig {
19
19
  maxResponseBytes: number;
20
20
  requestTimeoutMs: number;
21
21
  toolsets: ReadonlySet<Toolset>;
22
+ teamIds?: ReadonlySet<string>;
22
23
  websiteIds?: ReadonlySet<string>;
23
24
  }
24
25
  export declare function loadConfig(env?: NodeJS.ProcessEnv): UmamiCompassConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,YACnB,MAAM,EACN,QAAQ,EACR,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EACR,UAAU,CACF,CAAC;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClC;AA8JD,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,kBAAkB,CAgCnF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,YACnB,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EACR,UAAU,CACF,CAAC;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClC;AA4JD,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,kBAAkB,CAiCnF"}
package/dist/config.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { UmamiError } from "./api/errors.js";
2
2
  export const TOOLSETS = [
3
3
  "core",
4
+ "insights",
4
5
  "events",
5
6
  "sessions",
6
7
  "performance",
@@ -91,7 +92,7 @@ function parseAuth(env) {
91
92
  }
92
93
  function parseToolsets(value) {
93
94
  if (!value)
94
- return new Set(["core"]);
95
+ return new Set(["core", "insights"]);
95
96
  const names = value
96
97
  .split(",")
97
98
  .map((item) => item.trim())
@@ -108,7 +109,7 @@ function parseToolsets(value) {
108
109
  }
109
110
  return new Set(names);
110
111
  }
111
- function parseWebsiteIds(value) {
112
+ function parseUuidAllowlist(value, key, maximum) {
112
113
  if (!value)
113
114
  return undefined;
114
115
  const ids = value
@@ -117,12 +118,12 @@ function parseWebsiteIds(value) {
117
118
  .filter(Boolean);
118
119
  if (ids.length === 0)
119
120
  return undefined;
120
- if (ids.length > 100) {
121
- throw new UmamiError("CONFIGURATION_ERROR", "UMAMI_WEBSITE_IDS cannot contain more than 100 websites.");
121
+ if (ids.length > maximum) {
122
+ throw new UmamiError("CONFIGURATION_ERROR", `${key} cannot contain more than ${maximum} IDs.`);
122
123
  }
123
124
  const uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
124
125
  if (ids.some((id) => !uuid.test(id))) {
125
- throw new UmamiError("CONFIGURATION_ERROR", "UMAMI_WEBSITE_IDS must be a comma-separated list of UUIDs.");
126
+ throw new UmamiError("CONFIGURATION_ERROR", `${key} must be a comma-separated list of UUIDs.`);
126
127
  }
127
128
  return new Set(ids.map((id) => id.toLowerCase()));
128
129
  }
@@ -142,7 +143,8 @@ export function loadConfig(env = process.env) {
142
143
  maxResponseBytes: parseInteger(optional(env, "UMAMI_MAX_RESPONSE_BYTES"), "UMAMI_MAX_RESPONSE_BYTES", 10_485_760, { min: 102_400, max: 52_428_800 }),
143
144
  requestTimeoutMs: parseInteger(optional(env, "UMAMI_REQUEST_TIMEOUT_MS"), "UMAMI_REQUEST_TIMEOUT_MS", 30_000, { min: 1_000, max: 120_000 }),
144
145
  toolsets: parseToolsets(optional(env, "UMAMI_TOOLSETS")),
145
- websiteIds: parseWebsiteIds(optional(env, "UMAMI_WEBSITE_IDS")),
146
+ teamIds: parseUuidAllowlist(optional(env, "UMAMI_TEAM_IDS"), "UMAMI_TEAM_IDS", 25),
147
+ websiteIds: parseUuidAllowlist(optional(env, "UMAMI_WEBSITE_IDS"), "UMAMI_WEBSITE_IDS", 100),
146
148
  };
147
149
  }
148
150
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ import type { z } from "zod";
2
+ import type { UmamiClient } from "../api/client.js";
3
+ import type { Website } from "../api/types.js";
4
+ import type { TimeInput } from "../time.js";
5
+ import { type filtersSchema } from "./schemas.js";
6
+ export declare const TRAFFIC_DIMENSIONS: readonly ["path", "referrer", "country", "device", "channel", "event"];
7
+ export type TrafficDimension = (typeof TRAFFIC_DIMENSIONS)[number];
8
+ export interface TimePeriod {
9
+ endAt: number;
10
+ startAt: number;
11
+ }
12
+ export interface WebsiteTotals {
13
+ bounces: number;
14
+ pageviews: number;
15
+ totaltime: number;
16
+ visitors: number;
17
+ visits: number;
18
+ }
19
+ export interface WebsiteStats extends WebsiteTotals {
20
+ comparison?: WebsiteTotals;
21
+ }
22
+ type Filters = z.infer<typeof filtersSchema> | undefined;
23
+ export declare function finiteNumber(value: unknown): number | undefined;
24
+ export declare function parseWebsiteStats(value: unknown): WebsiteStats;
25
+ export declare function percentChange(current: number, comparison: number): number | null;
26
+ export declare function totalsChanges(current: WebsiteTotals, comparison: WebsiteTotals): {
27
+ [k: string]: {
28
+ absolute: number;
29
+ percent: number | null;
30
+ };
31
+ };
32
+ export declare function isoPeriod(period: TimePeriod): {
33
+ start: string;
34
+ end: string;
35
+ };
36
+ export declare function normalizePeriod(start: TimeInput, end: TimeInput, maxRangeDays: number): TimePeriod;
37
+ export declare function comparisonPeriod(current: TimePeriod, mode: "previous" | "year_over_year"): TimePeriod;
38
+ export declare function mapConcurrent<T, R>(values: readonly T[], concurrency: number, operation: (value: T, index: number) => Promise<R>): Promise<R[]>;
39
+ export declare function fetchWebsiteStats(client: UmamiClient, websiteId: string, period: TimePeriod, maxRangeDays: number, filters: Filters, signal?: AbortSignal): Promise<WebsiteStats>;
40
+ export interface TrafficComparisonInput {
41
+ comparison: TimePeriod;
42
+ current: TimePeriod;
43
+ dimensions: readonly TrafficDimension[];
44
+ filters?: Filters;
45
+ limit: number;
46
+ maxRangeDays: number;
47
+ signal?: AbortSignal;
48
+ website: Pick<Website, "domain" | "id" | "name">;
49
+ }
50
+ export declare function compareTraffic(client: UmamiClient, input: TrafficComparisonInput): Promise<{
51
+ dataStatus: "available" | "empty";
52
+ website: Pick<Website, "domain" | "id" | "name">;
53
+ currentPeriod: {
54
+ start: string;
55
+ end: string;
56
+ };
57
+ comparisonPeriod: {
58
+ start: string;
59
+ end: string;
60
+ };
61
+ current: WebsiteTotals;
62
+ comparison: WebsiteTotals;
63
+ changes: {
64
+ [k: string]: {
65
+ absolute: number;
66
+ percent: number | null;
67
+ };
68
+ };
69
+ direction: string;
70
+ explanation: string;
71
+ breakdownMeasure: string;
72
+ breakdowns: ({
73
+ dimension: "channel" | "country" | "device" | "event" | "path" | "referrer";
74
+ status: "available";
75
+ measure: "visitors";
76
+ rows: {
77
+ name: string;
78
+ current: number;
79
+ comparison: number;
80
+ delta: number;
81
+ percent: number | null;
82
+ direction: string;
83
+ }[];
84
+ dataQuality: {
85
+ currentRowsTruncated: boolean;
86
+ comparisonRowsTruncated: boolean;
87
+ omittedUncertainRows: number;
88
+ };
89
+ error?: undefined;
90
+ } | {
91
+ measure?: undefined;
92
+ rows?: undefined;
93
+ dataQuality?: undefined;
94
+ dimension: "channel" | "country" | "device" | "event" | "path" | "referrer";
95
+ status: "unavailable";
96
+ error: {
97
+ code: import("../api/errors.js").UmamiErrorCode;
98
+ message: string;
99
+ retryable: boolean;
100
+ status?: number;
101
+ };
102
+ })[];
103
+ leadingObservedChanges: {
104
+ name: string;
105
+ current: number;
106
+ comparison: number;
107
+ delta: number;
108
+ percent: number | null;
109
+ direction: string;
110
+ dimension: "channel" | "country" | "device" | "event" | "path" | "referrer";
111
+ }[];
112
+ dataQuality: {
113
+ comparisonBaselineZero: boolean;
114
+ currentPageviews: number;
115
+ comparisonPageviews: number;
116
+ unavailableDimensions: ("channel" | "country" | "device" | "event" | "path" | "referrer")[];
117
+ truncatedDimensions: ("channel" | "country" | "device" | "event" | "path" | "referrer")[];
118
+ omittedUncertainRows: number;
119
+ };
120
+ }>;
121
+ export declare function comparePerformance(client: UmamiClient, input: {
122
+ comparison: TimePeriod;
123
+ current: TimePeriod;
124
+ filters?: Filters;
125
+ signal?: AbortSignal;
126
+ timezone: string;
127
+ websiteId: string;
128
+ }): Promise<{
129
+ error?: undefined;
130
+ status: "available" | "empty";
131
+ currentSampleCount: number;
132
+ comparisonSampleCount: number;
133
+ minimumSampleCount: number;
134
+ sampleSufficient: boolean;
135
+ changes: {
136
+ [k: string]: {
137
+ currentP75: number;
138
+ comparisonP75: number;
139
+ absolute: number;
140
+ percent: number | null;
141
+ impact: string;
142
+ material: boolean;
143
+ currentRating: "good" | "needs_improvement" | "poor";
144
+ comparisonRating: "good" | "needs_improvement" | "poor";
145
+ };
146
+ };
147
+ } | {
148
+ currentSampleCount?: undefined;
149
+ comparisonSampleCount?: undefined;
150
+ minimumSampleCount?: undefined;
151
+ sampleSufficient?: undefined;
152
+ changes?: undefined;
153
+ status: string;
154
+ error: {
155
+ code: import("../api/errors.js").UmamiErrorCode;
156
+ message: string;
157
+ retryable: boolean;
158
+ status?: number;
159
+ };
160
+ }>;
161
+ export {};
162
+ //# sourceMappingURL=insights-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insights-utils.d.ts","sourceRoot":"","sources":["../../src/mcp/insights-utils.ts"],"names":[],"mappings":"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"}