pyxis-mcp 0.4.3 → 0.6.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.
package/README.md CHANGED
@@ -11,6 +11,7 @@ reading, through a connection or a token you can revoke at any time.**
11
11
  [![CI](https://github.com/samuelcsantana/pyxis-mcp/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/samuelcsantana/pyxis-mcp/actions/workflows/ci.yml)
12
12
  [![Coverage](https://codecov.io/gh/samuelcsantana/pyxis-mcp/graph/badge.svg)](https://codecov.io/gh/samuelcsantana/pyxis-mcp)
13
13
  [![CodeQL](https://github.com/samuelcsantana/pyxis-mcp/actions/workflows/codeql.yml/badge.svg?branch=main)](https://github.com/samuelcsantana/pyxis-mcp/actions/workflows/codeql.yml)
14
+ [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/samuelcsantana/pyxis-mcp/badge)](https://scorecard.dev/viewer/?uri=github.com/samuelcsantana/pyxis-mcp)
14
15
  <br>
15
16
  [![License: MIT](https://img.shields.io/github/license/samuelcsantana/pyxis-mcp)](LICENSE)
16
17
  [![TypeScript strict](https://img.shields.io/badge/TypeScript-strict-3178C6?logo=typescript&logoColor=white)](tsconfig.json)
@@ -24,26 +25,25 @@ reading, through a connection or a token you can revoke at any time.**
24
25
  </div>
25
26
 
26
27
  > **Status:** on npm as `pyxis-mcp`, every release published from GitHub Actions with
27
- > provenance. The fifteen tools read the live Pyxis API. The package also exports them as a
28
- > library, and the Pyxis API serves them at `https://api.pyxis-analytics.dev/mcp`, the remote
29
- > connector that Claude and Claude Code sign in to with OAuth.
28
+ > provenance, and served by the Pyxis API at `https://api.pyxis-analytics.dev/mcp`.
30
29
 
31
30
  ## Ecosystem
32
31
 
33
- | Repository | Role |
34
- | -------------------------------------------------------- | ------------------------------------------------------------- |
35
- | [pyxis-api](https://github.com/samuelcsantana/pyxis-api) | Ingestion, dashboard sign-in and queries, erasure, retention |
36
- | [pyxis-sdk](https://github.com/samuelcsantana/pyxis-sdk) | Browser tracker published to npm as `pyxis-analytics` |
37
- | [pyxis-web](https://github.com/samuelcsantana/pyxis-web) | The dashboard: overview, funnels, features, requests |
38
- | **pyxis-mcp** (this one) | MCP server that lets an AI agent read the dashboard's numbers |
32
+ | Repository | Role |
33
+ | -------------------------------------------------------- | -------------------------------------------------------------------------------------- |
34
+ | [pyxis-api](https://github.com/samuelcsantana/pyxis-api) | Ingestion, sign-in, dashboard queries, accounts and billing, erasure, the MCP endpoint |
35
+ | [pyxis-sdk](https://github.com/samuelcsantana/pyxis-sdk) | Browser tracker published to npm as `pyxis-analytics` |
36
+ | [pyxis-web](https://github.com/samuelcsantana/pyxis-web) | The dashboard and the home page |
37
+ | **pyxis-mcp** (this one) | MCP server: Claude and other agents read the dashboard's numbers |
39
38
 
40
39
  ## Why it exists
41
40
 
42
41
  More and more questions about a product are asked to an agent instead of a dashboard: "how did
43
42
  last week compare", "where does the sign-up funnel lose people", "which route started failing".
44
43
  This server gives Claude Code, Claude Desktop, Cursor and other MCP clients the same numbers the
45
- Pyxis dashboard shows, and nothing more: it uses an access token that only reads, created by an
46
- admin in the dashboard's Settings and revocable there at any moment. Like the rest of Pyxis, there
44
+ Pyxis dashboard shows, and nothing more: it reads through a Claude connection the admin allows or
45
+ an access token the admin creates, both read-only and revocable in the dashboard's Settings at any
46
+ moment. Like the rest of Pyxis, there
47
47
  is no personal data to hand over: events carry no cookies, no addresses and no user agents.
48
48
 
49
49
  ## Tools
@@ -58,19 +58,20 @@ dashboard; with a project that has received no event, the site does not run the
58
58
  | ------------------ | --------------------------------------------------------------------------------------------------------- |
59
59
  | `list_projects` | The projects the token can read: id, name, time zone, today there, conversion event, first and last event |
60
60
  | `overview` | Visits, identified users, conversions and failed writes against the previous period; top pages and events |
61
- | `devices` | Visits and conversions by device type, browser, system, country and region |
61
+ | `devices` | Visits and conversions by device type, browser, system, country, region and city; the reach of the range |
62
62
  | `acquisition` | Visits per day and channel, and the sources and campaigns behind them |
63
63
  | `engagement` | Entry and exit pages, single-page visits, visit length |
64
64
  | `time_of_day` | Visits by weekday and local hour |
65
65
  | `features` | The most used named events or screens, day by day |
66
66
  | `event_properties` | How the property values of one named event break down |
67
+ | `property_summary` | The median and quartiles of a numeric property, split by another: how long people read each article |
67
68
  | `requests` | Calls to the site's backend per route: failures, statuses, durations, latest errors |
68
69
  | `funnel` | How many visits or people reached each step, and the time between steps |
69
70
  | `funnel_segments` | The same funnel per device type or channel |
70
71
  | `funnel_subjects` | The visits or people who reached, or dropped at, one step |
71
- | `visits` | The visits of a range, filtered by pages, events, channel, device, country, campaign, failed requests |
72
+ | `visits` | The visits of a range, filtered by pages, events, channel, device, place, campaign, failed requests |
72
73
  | `visit_timeline` | Every event of one visit, or every visit of one identified person |
73
- | `project_settings` | Time zone, conversion event, allowed origins, retention, live public keys |
74
+ | `project_settings` | Time zone, conversion event, allowed origins, retention, whether the city is kept, live public keys |
74
75
 
75
76
  A result is JSON text, `{ "untrusted_visitor_text": "…", "report": … }`: the report is the API's
76
77
  answer, and the first field reminds the agent that names, paths and values inside it were written by
@@ -227,7 +228,7 @@ export function answerMcp(request: Request, callerToken: string): Promise<Respon
227
228
  | Export | What it does |
228
229
  | ------------------------------------------- | --------------------------------------------------------------------- |
229
230
  | `handleHttpRequest(request, api, options?)` | Answers one MCP exchange: a web `Request` in, a web `Response` out |
230
- | `createServer(api, options?)` | The MCP server with the fifteen tools, for a transport of your choice |
231
+ | `createServer(api, options?)` | The MCP server with the sixteen tools, for a transport of your choice |
231
232
  | `new PyxisApi(options)` | The client the tools read through, one per caller |
232
233
 
233
234
  `PyxisApi` options: `token` and `apiUrl` (required); `userAgent` (default `pyxis-mcp/<version>`);
@@ -265,9 +266,9 @@ signs Claude in with OAuth and runs the tools at `/mcp`.
265
266
 
266
267
  ## Tech stack
267
268
 
268
- TypeScript (strict) on Node 22 or later, ES modules. Vitest with V8 coverage, ESLint
269
+ TypeScript (strict) on Node 22 or later, ES modules. Vitest with V8 coverage, fast-check, ESLint
269
270
  (`typescript-eslint` strict, type-checked) and Prettier, Husky and commitlint, GitHub Actions with
270
- CodeQL, Dependabot and release-please.
271
+ CodeQL, OpenSSF Scorecard, Dependabot and release-please.
271
272
 
272
273
  ## Getting started
273
274
 
@@ -282,6 +283,15 @@ npm run lint && npm run typecheck && npm run test:cov && npm run build
282
283
  functions and lines. The server is tested with a real MCP client over an in-memory transport and
283
284
  a fake `fetch`; the HTTP handler with web `Request` objects, from `initialize` to a tool call,
284
285
  and every refusal.
286
+ - Property-based tests with [fast-check](https://fast-check.dev) (`src/*.property.test.ts`) check
287
+ the rules over generated inputs: `offsetOf` reads back any offset a time zone can name;
288
+ `inTimeZone` writes, for every time zone, a local time that names the same instant; `localTimes`
289
+ rewrites exactly the UTC instants at the given paths, adds or drops no field and changes nothing
290
+ more on a second pass; `readConfig` fails with nothing but a `ConfigError` for any environment
291
+ and accepts a token exactly when it matches the pattern; `todayIn` is the date of the local
292
+ times the reports write. Each property runs 200 times from a fixed seed
293
+ (`src/property-parameters.ts`, left out of the build), so CI and the pre-commit hook see the same
294
+ inputs, and a failure prints the counterexample with the seed to replay it.
285
295
  - One file is left out of the unit coverage: `src/cli.ts`, which only wires the modules to the
286
296
  standard input and output. `npm run test:e2e` covers it: after `npm run build`, a real MCP client
287
297
  starts `dist/cli.js`, lists the tools and calls them against a local fake of the API, checks that
@@ -294,7 +304,8 @@ npm run lint && npm run typecheck && npm run test:cov && npm run build
294
304
  package is also loaded by name with `import` and with `require`.
295
305
  - `src/contract.test.ts` checks the tools against `contract/openapi.json`, the API's own contract
296
306
  (`npm run contract:sync` copies it from pyxis-api): every route a token may read has a tool,
297
- every tool sends only declared parameters, with values inside their enums, and every instant an
307
+ except the arrivals the dashboard polls to show that new data came in, every tool sends only
308
+ declared parameters, with values inside their enums, and every instant an
298
309
  answer declares is one its tool writes in the project time zone, read from the answer's
299
310
  `timezone`.
300
311
  - `npm run test:tooling` tests the lint rule and the scripts.
@@ -306,7 +317,7 @@ npm run lint && npm run typecheck && npm run test:cov && npm run build
306
317
  src/
307
318
  ├── config.ts reads PYXIS_TOKEN and PYXIS_API_URL
308
319
  ├── pyxis-api.ts one GET to the API, failures as sentences
309
- ├── tools.ts the fifteen tools: input schemas, routes, requests
320
+ ├── tools.ts the sixteen tools: input schemas, routes, requests
310
321
  ├── time-zone.ts writes the instants of an answer in the project time zone
311
322
  ├── server.ts registers the tools on the MCP server
312
323
  ├── http.ts one stateless Streamable HTTP exchange
@@ -344,12 +355,8 @@ docs/adr/ architecture decision records
344
355
 
345
356
  ## Roadmap
346
357
 
347
- - [x] Repository skeleton, quality gates, configuration reader
348
- - [x] Tools over the API's read routes, tested against its OpenAPI contract
349
- - [x] First release on npm, with provenance
350
- - [x] The tools as a library, served over stateless Streamable HTTP by a host
351
- - [x] A remote endpoint in the Pyxis API, signed in with OAuth, for clients that only take URLs
352
- - [x] Setup for Claude, Claude Code and clients that send a header
358
+ What shipped, release by release, is in the [CHANGELOG](CHANGELOG.md) and the
359
+ [GitHub releases](https://github.com/samuelcsantana/pyxis-mcp/releases).
353
360
 
354
361
  ## Contributing and license
355
362
 
package/dist/time-zone.js CHANGED
@@ -55,7 +55,7 @@ function rewriteAt(value, steps, rewrite) {
55
55
  ? value.map((item) => rewriteAt(item, rest, rewrite))
56
56
  : value;
57
57
  }
58
- if (!isRecord(value) || !(step in value)) {
58
+ if (!isRecord(value) || !Object.hasOwn(value, step)) {
59
59
  return value;
60
60
  }
61
61
  return { ...value, [step]: rewriteAt(value[step], rest, rewrite) };
@@ -1 +1 @@
1
- {"version":3,"file":"time-zone.js","sourceRoot":"","sources":["../src/time-zone.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"time-zone.js","sourceRoot":"","sources":["../src/time-zone.ts"],"names":[],"mappings":"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"}
package/dist/tools.js CHANGED
@@ -9,12 +9,14 @@ const COUNTRY_CODE = /^[A-Z]{2}$/;
9
9
  const REGION_CODE = /^[A-Z]{2}-[A-Z0-9]{1,3}$/;
10
10
  const ROUTE = /^[A-Z]+ \/\S*$/;
11
11
  const PROPERTY_FILTER = /^[^=]+=.+$/;
12
+ const PROPERTY_KEY = /^[a-z0-9_]{1,40}$/;
12
13
  const MAX_FUNNEL_STEPS = 8;
13
14
  const MIN_FUNNEL_STEPS = 2;
14
15
  const MAX_VISIT_PAGES = 3;
15
16
  const MAX_SOURCE_LENGTH = 128;
16
17
  const MAX_CAMPAIGN_LENGTH = 64;
17
18
  const MAX_TEXT_LENGTH = 512;
19
+ const MAX_CITY_LENGTH = 100;
18
20
  export class ToolInputError extends Error {
19
21
  constructor(message) {
20
22
  super(message);
@@ -57,6 +59,51 @@ const eventName = z.string().regex(EVENT_NAME);
57
59
  const pagePath = z.string().startsWith('/').max(MAX_TEXT_LENGTH);
58
60
  const route = z.string().regex(ROUTE).max(MAX_TEXT_LENGTH);
59
61
  const cursor = z.string().min(1).max(MAX_TEXT_LENGTH);
62
+ const propertyFilter = z.string().regex(PROPERTY_FILTER).max(MAX_TEXT_LENGTH);
63
+ const pagesFilter = z
64
+ .array(pagePath)
65
+ .max(MAX_VISIT_PAGES)
66
+ .optional()
67
+ .describe('Up to 3 page paths the visit viewed, every one of them; a star matches any characters.');
68
+ const channelFilter = z
69
+ .enum(['paid', 'email', 'social', 'campaign', 'organic', 'referral', 'direct'])
70
+ .optional();
71
+ const deviceFilter = z.enum(['mobile', 'tablet', 'desktop', 'other']).optional();
72
+ const browserFilter = z
73
+ .enum(['chrome', 'safari', 'firefox', 'edge', 'samsung', 'opera', 'other'])
74
+ .optional();
75
+ const osFilter = z
76
+ .enum(['android', 'ios', 'windows', 'macos', 'linux', 'chromeos', 'other'])
77
+ .optional();
78
+ const identityFilter = z.enum(['identified', 'anonymous']).optional();
79
+ const countryFilter = z
80
+ .string()
81
+ .regex(COUNTRY_CODE)
82
+ .optional()
83
+ .describe('Two-letter country code: BR.');
84
+ const regionFilter = z
85
+ .string()
86
+ .regex(REGION_CODE)
87
+ .optional()
88
+ .describe('ISO 3166-2 region code: BR-SP.');
89
+ const cityFilter = z
90
+ .string()
91
+ .min(1)
92
+ .max(MAX_CITY_LENGTH)
93
+ .optional()
94
+ .describe('An approximate city, by its exact name as devices lists it: Salvador. Needs region, since the same name exists in several regions.');
95
+ const sourceFilter = z
96
+ .string()
97
+ .min(1)
98
+ .max(MAX_SOURCE_LENGTH)
99
+ .optional()
100
+ .describe('The source as acquisition names it: campaign source, referring host, (ad click) or (direct).');
101
+ const campaignFilter = z
102
+ .string()
103
+ .min(1)
104
+ .max(MAX_CAMPAIGN_LENGTH)
105
+ .optional()
106
+ .describe('The utm_campaign.');
60
107
  const funnelStep = z.discriminatedUnion('type', [
61
108
  z.object({
62
109
  type: z.literal('page'),
@@ -76,6 +123,11 @@ const funnelMode = z
76
123
  .enum(['visit', 'user'])
77
124
  .default('visit')
78
125
  .describe('visit counts each visit on its own; user follows identified people across visits.');
126
+ function checkCityHasRegion(filters) {
127
+ if (filters.city !== undefined && filters.region === undefined) {
128
+ throw new ToolInputError('city is matched inside a region: give region too.');
129
+ }
130
+ }
79
131
  function rangeQuery(args) {
80
132
  return { from: args.from, to: args.to };
81
133
  }
@@ -141,7 +193,7 @@ export const PYXIS_TOOLS = [
141
193
  report: projectsReport,
142
194
  }),
143
195
  rangeTool('overview', 'Overview', 'overview', 'Visits, identified users, conversions and failed writes of a range against the previous period, the daily activity of both, and the top pages and events. A range that ends today is compared with the previous period up to the same time of day.'),
144
- rangeTool('devices', 'Devices', 'devices', 'Visits and conversions by device type, browser, operating system, country and region.'),
196
+ rangeTool('devices', 'Devices', 'devices', 'Visits and conversions by device type, browser, operating system, country, region and approximate city, and the reach of the range. regions lists the top 10 regions (ISO 3166-2 codes such as BR-SP, with their names), then "other", then a null value for the visits without a region. cities lists the top 20 cities, each with its region, then "other", then a null value for the visits without a city. The city is kept only for a project whose owner turned it on (city_enabled in project_settings); with it off, every visit counts as without a city. reach counts the visits of the range and the continents (as UN M49 groups the countries: Americas, Europe, Asia, Africa, Oceania), countries, regions and cities they came from, with the country and the region that brought the most visits; unknown places count for none.'),
145
197
  rangeTool('acquisition', 'Acquisition', 'acquisition', 'Visits per day and channel (paid, email, social, campaign, organic, referral, direct), and the sources and campaigns that brought them, with their conversions and ad clicks. A source is the campaign source, else the referring host; a visit with neither is (ad click) when it came from an ad click, such as one opened by an app that sends no referrer, and (direct) otherwise.'),
146
198
  rangeTool('engagement', 'Engagement', 'engagement', 'The top entry and exit pages, the visits that viewed a single page, and how long visits lasted (median and buckets).'),
147
199
  rangeTool('time_of_day', 'Time of day', 'time-of-day', 'The visits of the range by the weekday and the local hour they started.'),
@@ -176,6 +228,67 @@ export const PYXIS_TOOLS = [
176
228
  query: { ...rangeQuery(args), name: args.event },
177
229
  }),
178
230
  }),
231
+ defineTool({
232
+ name: 'property_summary',
233
+ title: 'Property summary',
234
+ description: describeRangeTool('The median, 25th and 75th percentiles of one numeric property of a named event, overall and split by another property of the same event. It answers questions such as how long people read each article: the median of seconds on article_read_100, split by post. Only events whose property is a JSON number count: overall.events says how many, and the figures are null when none does. With by, groups holds the 10 values of that property carried by the most events, and other_count counts the events of every other value; events without it count in overall only. The visit filters keep only the events of the visits that match all of them.'),
235
+ inputSchema: {
236
+ ...rangeShape,
237
+ event: eventName.describe('The named event whose property to sum up: article_read_100.'),
238
+ key: z.string().regex(PROPERTY_KEY).describe('The numeric property to sum up: seconds.'),
239
+ by: z
240
+ .string()
241
+ .regex(PROPERTY_KEY)
242
+ .optional()
243
+ .describe('Another property of the same event to split the figures by: post.'),
244
+ pages: pagesFilter,
245
+ visit_event: eventName.optional().describe('Only the visits that sent this named event.'),
246
+ visit_property: propertyFilter
247
+ .optional()
248
+ .describe('key=value: visit_event carried this property value. Needs visit_event.'),
249
+ channel: channelFilter,
250
+ device: deviceFilter,
251
+ browser: browserFilter,
252
+ os: osFilter,
253
+ identity: identityFilter,
254
+ country: countryFilter,
255
+ region: regionFilter,
256
+ city: cityFilter,
257
+ source: sourceFilter,
258
+ campaign: campaignFilter,
259
+ failed: z.boolean().optional().describe('true: only the visits with a failed request.'),
260
+ },
261
+ route: projectRoute('features/properties/summary'),
262
+ request: (args) => {
263
+ if (args.visit_property !== undefined && args.visit_event === undefined) {
264
+ throw new ToolInputError('visit_property filters the values of an event: give visit_event too.');
265
+ }
266
+ checkCityHasRegion(args);
267
+ return {
268
+ path: projectPath(args.project_id, 'features/properties/summary'),
269
+ query: {
270
+ ...rangeQuery(args),
271
+ name: args.event,
272
+ key: args.key,
273
+ by: args.by,
274
+ path: args.pages,
275
+ event: args.visit_event,
276
+ property: args.visit_property,
277
+ channel: args.channel,
278
+ device: args.device,
279
+ browser: args.browser,
280
+ os: args.os,
281
+ identity: args.identity,
282
+ country: args.country,
283
+ region: args.region,
284
+ city: args.city,
285
+ source: args.source,
286
+ campaign: args.campaign,
287
+ failed: args.failed,
288
+ },
289
+ };
290
+ },
291
+ }),
179
292
  defineTool({
180
293
  name: 'requests',
181
294
  title: 'Requests',
@@ -252,35 +365,22 @@ export const PYXIS_TOOLS = [
252
365
  defineTool({
253
366
  name: 'visits',
254
367
  title: 'Visits',
255
- description: describeRangeTool(withLocalTimes('The visits of a range, newest first, 50 a page, each with its entry page, page views, first named events, failed requests, source and campaign, plus the total of matching visits. A visit is one browser tab; nothing links two of them unless the site identified the person.')),
368
+ description: describeRangeTool(withLocalTimes('The visits of a range, newest first, 50 a page, each with its entry page, page views, first named events, failed requests, source, campaign, country, region and approximate city (null unless the project keeps the city), plus the total of matching visits. A visit is one browser tab; nothing links two of them unless the site identified the person.')),
256
369
  inputSchema: {
257
370
  ...rangeShape,
258
- pages: z
259
- .array(pagePath)
260
- .max(MAX_VISIT_PAGES)
261
- .optional()
262
- .describe('Up to 3 page paths the visit viewed, every one of them; a star matches any characters.'),
371
+ pages: pagesFilter,
263
372
  event: eventName.optional().describe('A named event the visit sent.'),
264
- property: z
265
- .string()
266
- .regex(PROPERTY_FILTER)
267
- .max(MAX_TEXT_LENGTH)
373
+ property: propertyFilter
268
374
  .optional()
269
375
  .describe('key=value: the event above carried this property value. Needs event.'),
270
- channel: z
271
- .enum(['paid', 'email', 'social', 'campaign', 'organic', 'referral', 'direct'])
272
- .optional(),
273
- device: z.enum(['mobile', 'tablet', 'desktop', 'other']).optional(),
274
- identity: z.enum(['identified', 'anonymous']).optional(),
275
- country: z.string().regex(COUNTRY_CODE).optional().describe('Two-letter country code: BR.'),
276
- region: z.string().regex(REGION_CODE).optional().describe('ISO 3166-2 region code: BR-SP.'),
277
- source: z
278
- .string()
279
- .min(1)
280
- .max(MAX_SOURCE_LENGTH)
281
- .optional()
282
- .describe('The source as acquisition names it: campaign source, referring host, (ad click) or (direct).'),
283
- campaign: z.string().min(1).max(MAX_CAMPAIGN_LENGTH).optional().describe('The utm_campaign.'),
376
+ channel: channelFilter,
377
+ device: deviceFilter,
378
+ identity: identityFilter,
379
+ country: countryFilter,
380
+ region: regionFilter,
381
+ city: cityFilter,
382
+ source: sourceFilter,
383
+ campaign: campaignFilter,
284
384
  route: route.optional().describe('A request the visit made: POST /orders/:id.'),
285
385
  failed: z
286
386
  .boolean()
@@ -294,6 +394,7 @@ export const PYXIS_TOOLS = [
294
394
  if (args.property !== undefined && args.event === undefined) {
295
395
  throw new ToolInputError('property filters the values of an event: give event too.');
296
396
  }
397
+ checkCityHasRegion(args);
297
398
  return {
298
399
  path: projectPath(args.project_id, 'visits'),
299
400
  query: {
@@ -306,6 +407,7 @@ export const PYXIS_TOOLS = [
306
407
  identity: args.identity,
307
408
  country: args.country,
308
409
  region: args.region,
410
+ city: args.city,
309
411
  source: args.source,
310
412
  campaign: args.campaign,
311
413
  route: args.route,
@@ -318,7 +420,7 @@ export const PYXIS_TOOLS = [
318
420
  defineTool({
319
421
  name: 'visit_timeline',
320
422
  title: 'Visit timeline',
321
- description: `${withLocalTimes('Every event of one visit, or every visit of one identified person (the anonymous part of the visit they identified in included), newest first, 20 visits a page. It takes exactly one of session_id (a visit id from visits or funnel_subjects) or user_id.')}\n\n${VISITOR_TEXT_NOTE}`,
423
+ description: `${withLocalTimes('Every event of one visit, or every visit of one identified person (the anonymous part of the visit they identified in included), newest first, 20 visits a page; each visit names its country, region and approximate city (null unless the project keeps the city). It takes exactly one of session_id (a visit id from visits or funnel_subjects) or user_id.')}\n\n${VISITOR_TEXT_NOTE}`,
322
424
  inputSchema: {
323
425
  project_id: projectId,
324
426
  session_id: z.uuid().optional().describe('A visit id, from visits or funnel_subjects.'),
@@ -357,7 +459,7 @@ export const PYXIS_TOOLS = [
357
459
  defineTool({
358
460
  name: 'project_settings',
359
461
  title: 'Project settings',
360
- description: withLocalTimes('The settings of one project: time zone, conversion event, allowed origins, first and latest event, how many months events are kept, the live public keys, and when each live secret key was created (never the secret key itself).'),
462
+ description: withLocalTimes("The settings of one project: time zone, conversion event, allowed origins, first and latest event, how many months events are kept, whether the visitor's approximate city is kept, the live public keys, and when each live secret key was created (never the secret key itself)."),
361
463
  inputSchema: { project_id: projectId },
362
464
  route: projectRoute('settings'),
363
465
  instants: [
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pyxis-mcp",
3
- "version": "0.4.3",
3
+ "version": "0.6.0",
4
4
  "description": "MCP server for Pyxis, privacy-first product analytics: lets an AI agent read your dashboard's numbers with a read-only token, locally over stdio or hosted over HTTP.",
5
5
  "keywords": [
6
6
  "mcp",
@@ -61,6 +61,7 @@
61
61
  "ajv-formats": "^3.0.1",
62
62
  "eslint": "^10.12.0",
63
63
  "eslint-config-prettier": "^10.1.8",
64
+ "fast-check": "^4.10.2",
64
65
  "husky": "^9.1.7",
65
66
  "lint-staged": "^17.6.0",
66
67
  "prettier": "^3.9.10",