@dataworks-technology/cli 1.4.1 → 1.5.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
@@ -131,8 +131,8 @@ after installing a release that adds commands.
131
131
 
132
132
  ## AI agent metric queries
133
133
 
134
- The package includes a focused, read-only MCP server with one tool:
135
- `query_metrics`. It uses the same OS-backed login session and selected tenant as
134
+ The package includes a focused, read-only MCP server with three tools:
135
+ `query_metrics`, `list_athletes`, and `list_events`. It uses the same OS-backed login session and selected tenant as
136
136
  `dw`, resolves an athlete by exact ID or unique name, resolves metric names
137
137
  against the canonical Dataworks catalogue, polls asynchronous Data Explorer
138
138
  queries, and returns normalized structured rows. GPS values include decoded
@@ -199,8 +199,19 @@ exactly one of `athlete_id` or `athlete_name`, plus `metric`; optional inputs ar
199
199
  `limit`, `order`, `from`, `to`, `event_id`, `dataset_datasource_id`,
200
200
  `tenant_id`, `metric_category`, and `timeout_ms`.
201
201
 
202
+ A query must be scoped by `athlete_id`, `athlete_name`, `event_id`, or
203
+ `dataset_datasource_id`. Supplying only an event or datasource answers questions
204
+ about a whole race — "the latest heart rate values at T100 San Francisco" — and
205
+ returns a null `athlete` with each row still carrying its own `athlete_id`.
206
+
207
+ `list_athletes` and `list_events` exist so an agent can resolve an ID instead of
208
+ guessing one, and can tell "not in this tenant" apart from "misspelled". When
209
+ `list_events` reports `unavailable: true` the event API returned nothing for that
210
+ session, which is a permissions problem rather than an empty tenant.
211
+
202
212
  The server never performs mutations. If name resolution is ambiguous, it
203
213
  returns candidates and requires an explicit athlete ID rather than guessing.
214
+ Every error carries a `recovery` field naming the command that fixes it.
204
215
 
205
216
  ---
206
217
 
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Roster and event lookup for agents.
3
+ *
4
+ * Without this an agent that hits ATHLETE_NOT_FOUND has no sanctioned way to find
5
+ * out what does exist, and drops to raw GraphQL to go looking — which is how a
6
+ * simple question turns into twenty exploratory shell commands.
7
+ */
8
+ import { executeGraphql } from "./graphql-transport.js";
9
+ import { requireSession } from "./session.js";
10
+ export interface DiscoverDependencies {
11
+ graphql: typeof executeGraphql;
12
+ session: typeof requireSession;
13
+ }
14
+ export interface AthleteSummary {
15
+ publicId: string;
16
+ name: string | null;
17
+ externalId: string | null;
18
+ }
19
+ export interface EventSummary {
20
+ publicId: string;
21
+ name: string | null;
22
+ startTime: string | null;
23
+ }
24
+ export interface DiscoverInput {
25
+ search?: string;
26
+ limit?: number;
27
+ tenantId?: string;
28
+ }
29
+ export interface AthleteListOutput {
30
+ tenantId: string;
31
+ total: number;
32
+ count: number;
33
+ search: string | null;
34
+ athletes: AthleteSummary[];
35
+ }
36
+ export interface EventListOutput {
37
+ tenantId: string;
38
+ total: number;
39
+ count: number;
40
+ search: string | null;
41
+ events: EventSummary[];
42
+ /**
43
+ * Set when the API returned null rather than a list. Callers must not read that
44
+ * as "no events exist"; it is usually a permissions problem on the session.
45
+ */
46
+ unavailable: boolean;
47
+ }
48
+ export declare function listAthletes(input?: DiscoverInput, options?: {
49
+ dependencies?: Partial<DiscoverDependencies>;
50
+ }): Promise<AthleteListOutput>;
51
+ export declare function listEvents(input?: DiscoverInput, options?: {
52
+ dependencies?: Partial<DiscoverDependencies>;
53
+ }): Promise<EventListOutput>;
54
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/lib/discover.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,cAAc,CAAC;IAC/B,OAAO,EAAE,OAAO,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AA6ED,wBAAsB,YAAY,CAChC,KAAK,GAAE,aAAkB,EACzB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;CAAO,GAC7D,OAAO,CAAC,iBAAiB,CAAC,CAmC5B;AAED,wBAAsB,UAAU,CAC9B,KAAK,GAAE,aAAkB,EACzB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;CAAO,GAC7D,OAAO,CAAC,eAAe,CAAC,CAoC1B"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Roster and event lookup for agents.
3
+ *
4
+ * Without this an agent that hits ATHLETE_NOT_FOUND has no sanctioned way to find
5
+ * out what does exist, and drops to raw GraphQL to go looking — which is how a
6
+ * simple question turns into twenty exploratory shell commands.
7
+ */
8
+ import { executeGraphql } from "./graphql-transport.js";
9
+ import { CliError, toCliError } from "./errors.js";
10
+ import { requireSession } from "./session.js";
11
+ const listAthletesDocument = `query listAthletes($limit: Int, $nextToken: String, $tenant: String!) {
12
+ listAthletes(limit: $limit, nextToken: $nextToken, tenant: $tenant) {
13
+ items { publicId externalId forename surname name nameShort }
14
+ nextToken
15
+ }
16
+ }`;
17
+ const listEventsDocument = `query listEvents($limit: Int, $nextToken: String, $tenant: String!) {
18
+ listEvents(limit: $limit, nextToken: $nextToken, tenant: $tenant) {
19
+ items { publicId name startTime }
20
+ nextToken
21
+ }
22
+ }`;
23
+ const defaultDependencies = {
24
+ graphql: executeGraphql,
25
+ session: requireSession,
26
+ };
27
+ function normalize(value) {
28
+ return value
29
+ .trim()
30
+ .toLocaleLowerCase()
31
+ .replaceAll(/[^a-z0-9]/g, "");
32
+ }
33
+ function athleteName(athlete) {
34
+ const full = [athlete.forename, athlete.surname]
35
+ .filter((part) => Boolean(String(part ?? "").trim()))
36
+ .join(" ");
37
+ return athlete.name?.trim() || full || athlete.nameShort?.trim() || null;
38
+ }
39
+ async function resolveTenant(input, dependencies) {
40
+ const session = await dependencies.session();
41
+ const tenantId = input.tenantId?.trim() || session.tenant;
42
+ if (!tenantId) {
43
+ throw new CliError("No tenant selected; run `dw tenant select` or provide tenant_id", "TENANT_REQUIRED", 2);
44
+ }
45
+ return tenantId;
46
+ }
47
+ /** Page through a connection, stopping at a page cap rather than looping forever. */
48
+ async function collect(document, field, tenantId, dependencies) {
49
+ const items = [];
50
+ let nextToken;
51
+ let pages = 0;
52
+ let sawConnection = false;
53
+ do {
54
+ const result = await dependencies.graphql(document, {
55
+ limit: 100,
56
+ nextToken,
57
+ tenant: tenantId,
58
+ });
59
+ const connection = result?.[field];
60
+ if (connection)
61
+ sawConnection = true;
62
+ items.push(...(connection?.items ?? []));
63
+ nextToken = connection?.nextToken;
64
+ pages += 1;
65
+ } while (nextToken && pages < 100);
66
+ return { items, unavailable: !sawConnection };
67
+ }
68
+ export async function listAthletes(input = {}, options = {}) {
69
+ const dependencies = { ...defaultDependencies, ...options.dependencies };
70
+ try {
71
+ const tenantId = await resolveTenant(input, dependencies);
72
+ const { items } = await collect(listAthletesDocument, "listAthletes", tenantId, dependencies);
73
+ const all = items.map((athlete) => ({
74
+ publicId: String(athlete.publicId),
75
+ name: athleteName(athlete),
76
+ externalId: athlete.externalId ?? null,
77
+ }));
78
+ const search = input.search?.trim() || null;
79
+ const needle = search ? normalize(search) : null;
80
+ const matched = needle
81
+ ? all.filter((athlete) => [athlete.name, athlete.externalId, athlete.publicId]
82
+ .filter((value) => Boolean(value))
83
+ .some((value) => normalize(value).includes(needle)))
84
+ : all;
85
+ const limit = input.limit ?? 50;
86
+ return {
87
+ tenantId,
88
+ total: matched.length,
89
+ count: Math.min(matched.length, limit),
90
+ search,
91
+ athletes: matched.slice(0, limit),
92
+ };
93
+ }
94
+ catch (error) {
95
+ throw toCliError(error);
96
+ }
97
+ }
98
+ export async function listEvents(input = {}, options = {}) {
99
+ const dependencies = { ...defaultDependencies, ...options.dependencies };
100
+ try {
101
+ const tenantId = await resolveTenant(input, dependencies);
102
+ const { items, unavailable } = await collect(listEventsDocument, "listEvents", tenantId, dependencies);
103
+ const all = items.map((event) => ({
104
+ publicId: String(event.publicId),
105
+ name: event.name ?? null,
106
+ startTime: event.startTime ?? null,
107
+ }));
108
+ const search = input.search?.trim() || null;
109
+ const needle = search ? normalize(search) : null;
110
+ const matched = needle
111
+ ? all.filter((event) => [event.name, event.publicId]
112
+ .filter((value) => Boolean(value))
113
+ .some((value) => normalize(value).includes(needle)))
114
+ : all;
115
+ const limit = input.limit ?? 50;
116
+ return {
117
+ tenantId,
118
+ total: matched.length,
119
+ count: Math.min(matched.length, limit),
120
+ search,
121
+ events: matched.slice(0, limit),
122
+ unavailable,
123
+ };
124
+ }
125
+ catch (error) {
126
+ throw toCliError(error);
127
+ }
128
+ }
129
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/lib/discover.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,27 @@
1
+ export interface GraphqlError {
2
+ message: string;
3
+ path?: Array<string | number>;
4
+ }
5
+ export interface GraphqlPayload<T> {
6
+ data?: T | null;
7
+ errors?: GraphqlError[];
8
+ }
9
+ /**
10
+ * Decide what a GraphQL response means.
11
+ *
12
+ * AppSync reports a partial failure as `{data: {field: null}, errors: [...]}`.
13
+ * Because `data` is present, an `errors` check keyed on `data` being undefined
14
+ * discards the explanation and hands back a bare null, which is indistinguishable
15
+ * from "there is genuinely nothing here". Callers then debug a silent null.
16
+ *
17
+ * Errors with no usable data are fatal. Errors alongside usable data are a real
18
+ * partial success, so the data is returned rather than thrown away — but the
19
+ * failure is reported to the caller so it cannot vanish.
20
+ */
21
+ export declare function interpretGraphqlPayload<T>(payload: GraphqlPayload<T>): {
22
+ data: T;
23
+ warnings: string[];
24
+ };
1
25
  export declare function executeGraphql<T = unknown>(document: string, variables: Record<string, unknown>): Promise<T>;
2
26
  export declare function subscribeGraphql(document: string, variables: Record<string, unknown>, onData: (data: unknown) => void): Promise<void>;
3
27
  //# sourceMappingURL=graphql-transport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql-transport.d.ts","sourceRoot":"","sources":["../../src/lib/graphql-transport.ts"],"names":[],"mappings":"AAWA,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC,CAkCZ;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoDf"}
1
+ {"version":3,"file":"graphql-transport.d.ts","sourceRoot":"","sources":["../../src/lib/graphql-transport.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;CACzB;AAQD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG;IACtE,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAcA;AAED,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC,CAgCZ;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -3,6 +3,36 @@ import { createSubscriptionHandshakeLink } from "aws-appsync-subscription-link";
3
3
  import { resolveEnvironment } from "./environment.js";
4
4
  import { CliError } from "./errors.js";
5
5
  import { requireSession } from "./session.js";
6
+ /** "listEvents: Unauthorized tenant access", or just the message when there is no path. */
7
+ function describe(error) {
8
+ const path = error.path?.join(".");
9
+ return path ? `${path}: ${error.message}` : error.message;
10
+ }
11
+ /**
12
+ * Decide what a GraphQL response means.
13
+ *
14
+ * AppSync reports a partial failure as `{data: {field: null}, errors: [...]}`.
15
+ * Because `data` is present, an `errors` check keyed on `data` being undefined
16
+ * discards the explanation and hands back a bare null, which is indistinguishable
17
+ * from "there is genuinely nothing here". Callers then debug a silent null.
18
+ *
19
+ * Errors with no usable data are fatal. Errors alongside usable data are a real
20
+ * partial success, so the data is returned rather than thrown away — but the
21
+ * failure is reported to the caller so it cannot vanish.
22
+ */
23
+ export function interpretGraphqlPayload(payload) {
24
+ const errors = payload.errors ?? [];
25
+ if (!errors.length)
26
+ return { data: payload.data, warnings: [] };
27
+ const values = payload.data && typeof payload.data === "object"
28
+ ? Object.values(payload.data)
29
+ : [];
30
+ const hasUsableData = values.some((value) => value !== null && value !== undefined);
31
+ if (!hasUsableData) {
32
+ throw new CliError(errors.map(describe).join("; "), "GRAPHQL_ERROR", 1, errors);
33
+ }
34
+ return { data: payload.data, warnings: errors.map(describe) };
35
+ }
6
36
  export async function executeGraphql(document, variables) {
7
37
  const session = await requireSession();
8
38
  const environment = resolveEnvironment(session.environment, session.clientId);
@@ -25,10 +55,13 @@ export async function executeGraphql(document, variables) {
25
55
  catch {
26
56
  throw new CliError("GraphQL returned invalid JSON", "GRAPHQL_RESPONSE_INVALID");
27
57
  }
28
- if (payload.errors?.length && typeof payload.data === "undefined") {
29
- throw new CliError(payload.errors.map((error) => error.message).join("; "), "GRAPHQL_ERROR", 1, payload.errors);
58
+ const { data, warnings } = interpretGraphqlPayload(payload);
59
+ // Partial success: stdout keeps carrying the usable data, including under
60
+ // --json, while the failure still reaches the operator on stderr.
61
+ for (const warning of warnings) {
62
+ process.stderr.write(`Warning: GraphQL partial failure — ${warning}\n`);
30
63
  }
31
- return payload.data;
64
+ return data;
32
65
  }
33
66
  export async function subscribeGraphql(document, variables, onData) {
34
67
  const session = await requireSession();
@@ -1 +1 @@
1
- {"version":3,"file":"graphql-transport.js","sourceRoot":"","sources":["../../src/lib/graphql-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphql-transport.js","sourceRoot":"","sources":["../../src/lib/graphql-transport.ts"],"names":[],"mappings":"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"}
@@ -34,11 +34,12 @@ export interface MetricRow {
34
34
  export interface QueryMetricsOutput {
35
35
  environment: "uat" | "live";
36
36
  tenantId: string;
37
+ /** Null when the query is scoped by event or datasource rather than an athlete. */
37
38
  athlete: {
38
39
  publicId: string;
39
40
  name: string | null;
40
41
  matchedBy: "public_id" | "name" | "partial_name";
41
- };
42
+ } | null;
42
43
  metric: {
43
44
  requested: string;
44
45
  canonical: string;
@@ -1 +1 @@
1
- {"version":3,"file":"query-metrics.d.ts","sourceRoot":"","sources":["../../src/lib/query-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqCD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,SAAS,EAAE,WAAW,GAAG,MAAM,GAAG,cAAc,CAAC;KAClD,CAAC;IACF,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,cAAc,CAAC;QACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KACrB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;KACnB,CAAC;IACF,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,SAAS,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,cAAc,CAAC;IAC/B,OAAO,EAAE,OAAO,cAAc,CAAC;IAC/B,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AA2YD,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,WAAW,CAAC;CACjB,GACL,OAAO,CAAC,kBAAkB,CAAC,CA0G7B"}
1
+ {"version":3,"file":"query-metrics.d.ts","sourceRoot":"","sources":["../../src/lib/query-metrics.ts"],"names":[],"mappings":"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"}
@@ -243,11 +243,16 @@ function normalizedRow(row, metric) {
243
243
  datasetDatasourceId: optionalString(row.datasetdatasourcepublicid),
244
244
  };
245
245
  }
246
- function ensureSingleAthleteSelector(input) {
246
+ function ensureQueryIsScoped(input) {
247
247
  const count = Number(Boolean(input.athleteId?.trim())) +
248
248
  Number(Boolean(input.athleteName?.trim()));
249
- if (count !== 1) {
250
- throw new CliError("Provide exactly one of athlete_id or athlete_name", "ATHLETE_SELECTOR_INVALID", 2);
249
+ if (count > 1) {
250
+ throw new CliError("Provide at most one of athlete_id or athlete_name", "ATHLETE_SELECTOR_INVALID", 2);
251
+ }
252
+ // Without a scope this would sweep every athlete in the tenant, which is never
253
+ // what was asked for and is expensive to run.
254
+ if (count === 0 && !input.eventId?.trim() && !input.datasetDatasourceId?.trim()) {
255
+ throw new CliError("Provide athlete_id, athlete_name, event_id, or dataset_datasource_id to scope the query", "QUERY_SCOPE_REQUIRED", 2);
251
256
  }
252
257
  }
253
258
  async function executeAndPoll(queryInput, tenantId, timeoutMs, dependencies, signal) {
@@ -283,7 +288,7 @@ async function executeAndPoll(queryInput, tenantId, timeoutMs, dependencies, sig
283
288
  export async function queryMetrics(input, options = {}) {
284
289
  const dependencies = { ...defaultDependencies, ...options.dependencies };
285
290
  try {
286
- ensureSingleAthleteSelector(input);
291
+ ensureQueryIsScoped(input);
287
292
  const session = await dependencies.session();
288
293
  const tenantId = input.tenantId?.trim() || session.tenant;
289
294
  if (!tenantId) {
@@ -298,20 +303,23 @@ export async function queryMetrics(input, options = {}) {
298
303
  throw new CliError("timeout_ms must be an integer from 1000 to 120000", "TIMEOUT_INVALID", 2);
299
304
  }
300
305
  const metric = resolveMetric(input);
301
- const athlete = await resolveAthlete(input, tenantId, dependencies);
306
+ // An event- or datasource-scoped question needs no athlete: "latest heart rate
307
+ // for this race" is a legitimate shape the tool used to be unable to express.
308
+ const athlete = input.athleteId || input.athleteName
309
+ ? await resolveAthlete(input, tenantId, dependencies)
310
+ : undefined;
302
311
  const from = input.from ? isoFilter(input.from, "from") : null;
303
312
  const to = input.to ? isoFilter(input.to, "to") : null;
304
313
  if (from && to && from.timestamp > to.timestamp) {
305
314
  throw new CliError("from must not be later than to", "TIME_RANGE_INVALID", 2);
306
315
  }
307
- const rules = [
308
- { field: "metric", operator: "in", value: metric.canonical },
309
- {
316
+ const rules = [{ field: "metric", operator: "in", value: metric.canonical }];
317
+ if (athlete)
318
+ rules.push({
310
319
  field: "athletepublicid",
311
320
  operator: "in",
312
321
  value: athlete.athlete.publicId,
313
- },
314
- ];
322
+ });
315
323
  if (input.eventId)
316
324
  rules.push({ field: "eventpublicid", operator: "in", value: input.eventId });
317
325
  if (input.datasetDatasourceId)
@@ -345,11 +353,13 @@ export async function queryMetrics(input, options = {}) {
345
353
  return {
346
354
  environment: session.environment,
347
355
  tenantId,
348
- athlete: {
349
- publicId: athlete.athlete.publicId,
350
- name: displayName(athlete.athlete),
351
- matchedBy: athlete.matchedBy,
352
- },
356
+ athlete: athlete
357
+ ? {
358
+ publicId: athlete.athlete.publicId,
359
+ name: displayName(athlete.athlete),
360
+ matchedBy: athlete.matchedBy,
361
+ }
362
+ : null,
353
363
  metric,
354
364
  filters: {
355
365
  eventId: input.eventId ?? null,
@@ -1 +1 @@
1
- {"version":3,"file":"query-metrics.js","sourceRoot":"","sources":["../../src/lib/query-metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-metrics.js","sourceRoot":"","sources":["../../src/lib/query-metrics.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,14 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import * as z from "zod/v4";
3
3
  import { type QueryMetricsInput, type QueryMetricsOutput } from "../lib/query-metrics.js";
4
+ import { type AthleteListOutput, type DiscoverInput, type EventListOutput } from "../lib/discover.js";
4
5
  export type QueryMetricsHandler = (input: QueryMetricsInput, options?: {
5
6
  signal?: AbortSignal;
6
7
  }) => Promise<QueryMetricsOutput>;
8
+ export interface DiscoveryHandlers {
9
+ listAthletes: (input: DiscoverInput) => Promise<AthleteListOutput>;
10
+ listEvents: (input: DiscoverInput) => Promise<EventListOutput>;
11
+ }
7
12
  export declare const queryMetricsInputSchema: z.ZodObject<{
8
13
  athlete_id: z.ZodOptional<z.ZodString>;
9
14
  athlete_name: z.ZodOptional<z.ZodString>;
@@ -31,7 +36,7 @@ export declare const queryMetricsOutputSchema: z.ZodObject<{
31
36
  live: "live";
32
37
  }>;
33
38
  tenant_id: z.ZodString;
34
- athlete: z.ZodObject<{
39
+ athlete: z.ZodNullable<z.ZodObject<{
35
40
  public_id: z.ZodString;
36
41
  name: z.ZodNullable<z.ZodString>;
37
42
  matched_by: z.ZodEnum<{
@@ -39,7 +44,7 @@ export declare const queryMetricsOutputSchema: z.ZodObject<{
39
44
  public_id: "public_id";
40
45
  partial_name: "partial_name";
41
46
  }>;
42
- }, z.core.$strip>;
47
+ }, z.core.$strip>>;
43
48
  metric: z.ZodObject<{
44
49
  requested: z.ZodString;
45
50
  canonical: z.ZodString;
@@ -81,5 +86,5 @@ export declare const queryMetricsOutputSchema: z.ZodObject<{
81
86
  dataset_datasource_id: z.ZodNullable<z.ZodString>;
82
87
  }, z.core.$strip>>;
83
88
  }, z.core.$strip>;
84
- export declare function createDataworksMcpServer(handler?: QueryMetricsHandler): McpServer;
89
+ export declare function createDataworksMcpServer(handler?: QueryMetricsHandler, discovery?: DiscoveryHandlers): McpServer;
85
90
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAS5B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAcjC,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;iBA0FhC,CAAC;AAIL,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwCnC,CAAC;AAmDH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,mBAAsE,GAC9E,SAAS,CAsFX"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAS5B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEjC,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnE,UAAU,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAChE;AAcD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;iBA6GhC,CAAC;AAIL,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0CnC,CAAC;AAqGH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,mBAAsE,EAC/E,SAAS,GAAE,iBAGV,GACA,SAAS,CAoLX"}
@@ -5,6 +5,7 @@ import { toCliError } from "../lib/errors.js";
5
5
  import { allMetricNames, metricCatalogSummary, } from "../lib/metric-names.js";
6
6
  import { redact } from "../lib/output.js";
7
7
  import { queryMetrics, } from "../lib/query-metrics.js";
8
+ import { listAthletes, listEvents, } from "../lib/discover.js";
8
9
  const metricCategory = z.enum(["METRICS_TYPE_A", "METRICS_TYPE_B", "METRICS_TYPE_C"]);
9
10
  const _categoriesMatch = true;
10
11
  void _categoriesMatch;
@@ -15,13 +16,15 @@ export const queryMetricsInputSchema = z
15
16
  .trim()
16
17
  .min(1)
17
18
  .optional()
18
- .describe("Exact Dataworks athlete public ID. Use this instead of athlete_name when known."),
19
+ .describe("Exact Dataworks athlete public ID. Use this instead of athlete_name when known. " +
20
+ "Omit both athlete fields to query a whole event or datasource."),
19
21
  athlete_name: z
20
22
  .string()
21
23
  .trim()
22
24
  .min(1)
23
25
  .optional()
24
- .describe("Athlete full or short name. The tool resolves a unique authorized athlete and never guesses when ambiguous."),
26
+ .describe("Athlete full or short name. The tool resolves a unique authorized athlete and never guesses when ambiguous. " +
27
+ "Omit it for an event-wide question such as the latest values across a race."),
25
28
  metric: z
26
29
  .string()
27
30
  .trim()
@@ -59,13 +62,13 @@ export const queryMetricsInputSchema = z
59
62
  .trim()
60
63
  .min(1)
61
64
  .optional()
62
- .describe("Optional exact event public ID filter."),
65
+ .describe("Event public ID. Supply it alone to query every athlete in that event, or with an athlete to narrow to one."),
63
66
  dataset_datasource_id: z
64
67
  .string()
65
68
  .trim()
66
69
  .min(1)
67
70
  .optional()
68
- .describe("Optional exact dataset-datasource public ID filter."),
71
+ .describe("Dataset-datasource public ID. Like event_id, it can scope a query on its own."),
69
72
  tenant_id: z
70
73
  .string()
71
74
  .trim()
@@ -81,10 +84,21 @@ export const queryMetricsInputSchema = z
81
84
  .describe("Maximum time to poll an asynchronous Data Explorer query."),
82
85
  })
83
86
  .superRefine((input, context) => {
84
- if (Number(Boolean(input.athlete_id)) + Number(Boolean(input.athlete_name)) !== 1) {
87
+ const athletes = Number(Boolean(input.athlete_id)) + Number(Boolean(input.athlete_name));
88
+ if (athletes > 1) {
85
89
  context.addIssue({
86
90
  code: "custom",
87
- message: "Provide exactly one of athlete_id or athlete_name",
91
+ message: "Provide at most one of athlete_id or athlete_name",
92
+ path: ["athlete_id"],
93
+ });
94
+ return;
95
+ }
96
+ // Unscoped queries would sweep the whole tenant, so require either an athlete
97
+ // or a narrowing filter. Both together are fine: one athlete within one event.
98
+ if (athletes === 0 && !input.event_id && !input.dataset_datasource_id) {
99
+ context.addIssue({
100
+ code: "custom",
101
+ message: "Provide athlete_id, athlete_name, event_id, or dataset_datasource_id to scope the query",
88
102
  path: ["athlete_id"],
89
103
  });
90
104
  }
@@ -93,11 +107,13 @@ const nullableString = z.string().nullable();
93
107
  export const queryMetricsOutputSchema = z.object({
94
108
  environment: z.enum(["uat", "live"]),
95
109
  tenant_id: z.string(),
96
- athlete: z.object({
110
+ athlete: z
111
+ .object({
97
112
  public_id: z.string(),
98
113
  name: nullableString,
99
114
  matched_by: z.enum(["public_id", "name", "partial_name"]),
100
- }),
115
+ })
116
+ .nullable(),
101
117
  metric: z.object({
102
118
  requested: z.string(),
103
119
  canonical: z.string(),
@@ -133,11 +149,13 @@ function structuredOutput(output) {
133
149
  return {
134
150
  environment: output.environment,
135
151
  tenant_id: output.tenantId,
136
- athlete: {
137
- public_id: output.athlete.publicId,
138
- name: output.athlete.name,
139
- matched_by: output.athlete.matchedBy,
140
- },
152
+ athlete: output.athlete
153
+ ? {
154
+ public_id: output.athlete.publicId,
155
+ name: output.athlete.name,
156
+ matched_by: output.athlete.matchedBy,
157
+ }
158
+ : null,
141
159
  metric: output.metric,
142
160
  filters: {
143
161
  event_id: output.filters.eventId,
@@ -165,23 +183,74 @@ function structuredOutput(output) {
165
183
  })),
166
184
  };
167
185
  }
186
+ /**
187
+ * Every failure an agent can act on must say how. An expired session is the most
188
+ * common auth failure of all and previously returned a null recovery, leaving the
189
+ * agent to work out from `dw auth status` that the session had lapsed.
190
+ */
191
+ function recoveryFor(code) {
192
+ switch (code) {
193
+ case "AUTH_REQUIRED":
194
+ case "AUTH_EXPIRED":
195
+ case "AUTH_FAILED":
196
+ case "SESSION_INVALID":
197
+ return "The Dataworks session is missing, expired, or invalid. Ask the user to run `dw auth login`, then retry.";
198
+ case "TENANT_REQUIRED":
199
+ return "Ask the user to run `dw tenant select`, then retry.";
200
+ case "ATHLETE_NOT_FOUND":
201
+ return "The athlete is not in this tenant. Do not retry with name variations; run `dw data athlete list --all --json` to see the roster, or query by event_id instead of an athlete.";
202
+ case "ATHLETE_AMBIGUOUS":
203
+ return "Present the returned candidates and ask the user which athlete they mean.";
204
+ case "METRIC_CATEGORY_REQUIRED":
205
+ return "Retry with one of the suggested canonical metric names, or supply metric_category for a genuinely custom metric.";
206
+ default:
207
+ return null;
208
+ }
209
+ }
210
+ /** One error shape for every tool, so an agent can parse failures uniformly. */
211
+ function toolError(error) {
212
+ const cliError = toCliError(error);
213
+ return {
214
+ isError: true,
215
+ content: [
216
+ {
217
+ type: "text",
218
+ text: JSON.stringify({
219
+ error: {
220
+ code: cliError.code,
221
+ message: cliError.message,
222
+ details: redact(cliError.details),
223
+ recovery: recoveryFor(cliError.code),
224
+ },
225
+ }),
226
+ },
227
+ ],
228
+ };
229
+ }
168
230
  function summary(output) {
169
- const athlete = output.athlete.name
170
- ? `${output.athlete.name} (${output.athlete.public_id})`
171
- : output.athlete.public_id;
231
+ const scope = output.athlete
232
+ ? output.athlete.name
233
+ ? `${output.athlete.name} (${output.athlete.public_id})`
234
+ : output.athlete.public_id
235
+ : (output.filters.event_id ?? output.filters.dataset_datasource_id ?? "the tenant");
172
236
  return [
173
- `Returned ${output.count} ${output.metric.canonical} metric value${output.count === 1 ? "" : "s"} for ${athlete}.`,
237
+ `Returned ${output.count} ${output.metric.canonical} metric value${output.count === 1 ? "" : "s"} for ${scope}.`,
174
238
  `Environment: ${output.environment}; tenant: ${output.tenant_id}; order: ${output.order}.`,
175
239
  ].join("\n");
176
240
  }
177
- export function createDataworksMcpServer(handler = (input, options) => queryMetrics(input, options)) {
241
+ export function createDataworksMcpServer(handler = (input, options) => queryMetrics(input, options), discovery = {
242
+ listAthletes: (input) => listAthletes(input),
243
+ listEvents: (input) => listEvents(input),
244
+ }) {
178
245
  const server = new McpServer({
179
246
  name: "dataworks",
180
247
  title: "Dataworks",
181
248
  version: packageJson.version,
182
249
  }, {
183
- instructions: "Use query_metrics for read-only athlete metric requests. Prefer athlete_id when the user supplies an ID; " +
184
- "otherwise pass athlete_name and let the tool resolve it. Do not guess IDs. " +
250
+ instructions: "Use query_metrics for read-only metric requests. Prefer athlete_id when the user supplies an ID; " +
251
+ "otherwise pass athlete_name and let the tool resolve it. For a question about a race or feed rather than a " +
252
+ "person, omit the athlete and pass event_id or dataset_datasource_id. Do not guess IDs: find them with " +
253
+ "`dw data athlete list --all --json` or `dw data event list --all --json`. " +
185
254
  `Metric names are drawn from a fixed catalogue: ${allMetricNames.join(", ")}. ` +
186
255
  "Map the user's wording onto one of these rather than inventing a name — everyday phrasing such as " +
187
256
  "“heart rate”, “HR” or “BPM” all resolve to heartrate. If nothing fits, the tool " +
@@ -189,7 +258,11 @@ export function createDataworksMcpServer(handler = (input, options) => queryMetr
189
258
  });
190
259
  server.registerTool("query_metrics", {
191
260
  title: "Query athlete metrics",
192
- description: "Return normalized Dataworks metric values for one athlete. Resolves an athlete name safely, maps common aliases such as GPS and heart rate, applies optional time/event/dataset filters, polls asynchronous Data Explorer queries, and decodes GPS coordinates. Read-only. Requires an existing `dw auth login` session and selected tenant unless tenant_id is supplied.",
261
+ description: "Return normalized Dataworks metric values, scoped either to an athlete or to an event or datasource. " +
262
+ "Resolves an athlete name safely, maps metric wording onto the canonical catalogue, applies optional time filters, " +
263
+ "polls asynchronous Data Explorer queries, and decodes GPS coordinates. Provide at least one of athlete_id, " +
264
+ "athlete_name, event_id, or dataset_datasource_id. Read-only. Requires an existing `dw auth login` session and " +
265
+ "selected tenant unless tenant_id is supplied.",
193
266
  inputSchema: queryMetricsInputSchema,
194
267
  outputSchema: queryMetricsOutputSchema,
195
268
  annotations: {
@@ -220,28 +293,102 @@ export function createDataworksMcpServer(handler = (input, options) => queryMetr
220
293
  };
221
294
  }
222
295
  catch (error) {
223
- const cliError = toCliError(error);
296
+ return toolError(error);
297
+ }
298
+ });
299
+ const discoverySchema = {
300
+ search: z
301
+ .string()
302
+ .trim()
303
+ .min(1)
304
+ .optional()
305
+ .describe("Optional filter. Case, spaces, hyphens and underscores are ignored, and it matches on name or ID."),
306
+ limit: z
307
+ .number()
308
+ .int()
309
+ .min(1)
310
+ .max(500)
311
+ .default(50)
312
+ .describe("Maximum entries to return; defaults to 50."),
313
+ tenant_id: z
314
+ .string()
315
+ .trim()
316
+ .min(1)
317
+ .optional()
318
+ .describe("Optional authorized tenant override; otherwise use the selected CLI tenant."),
319
+ };
320
+ server.registerTool("list_athletes", {
321
+ title: "List athletes",
322
+ description: "List athletes in the authorized tenant, optionally filtered by name or ID. Use this to find an athlete_id, " +
323
+ "and to confirm whether someone is in this tenant at all rather than retrying query_metrics with name variations. " +
324
+ "Read-only.",
325
+ inputSchema: discoverySchema,
326
+ annotations: {
327
+ readOnlyHint: true,
328
+ destructiveHint: false,
329
+ idempotentHint: true,
330
+ openWorldHint: false,
331
+ },
332
+ }, async (input) => {
333
+ try {
334
+ const output = await discovery.listAthletes({
335
+ search: input.search,
336
+ limit: input.limit,
337
+ tenantId: input.tenant_id,
338
+ });
224
339
  return {
225
- isError: true,
226
340
  content: [
227
341
  {
228
342
  type: "text",
229
- text: JSON.stringify({
230
- error: {
231
- code: cliError.code,
232
- message: cliError.message,
233
- details: redact(cliError.details),
234
- recovery: cliError.code === "AUTH_REQUIRED"
235
- ? "Run `dw auth login`, then retry."
236
- : cliError.code === "TENANT_REQUIRED"
237
- ? "Run `dw tenant select`, then retry."
238
- : null,
239
- },
240
- }),
343
+ text: output.total
344
+ ? `Matched ${output.total} athlete${output.total === 1 ? "" : "s"}; returning ${output.count}.`
345
+ : `No athlete matches${output.search ? ` "${output.search}"` : ""} in tenant ${output.tenantId}.`,
241
346
  },
242
347
  ],
348
+ structuredContent: output,
349
+ };
350
+ }
351
+ catch (error) {
352
+ return toolError(error);
353
+ }
354
+ });
355
+ server.registerTool("list_events", {
356
+ title: "List events",
357
+ description: "List events in the authorized tenant, optionally filtered by name or ID. Use this to find an event_id for a " +
358
+ "race before calling query_metrics. If `unavailable` is true the API returned no event list for this session, " +
359
+ "which is a permissions problem rather than proof that no events exist — say so instead of inferring an ID. " +
360
+ "Read-only.",
361
+ inputSchema: discoverySchema,
362
+ annotations: {
363
+ readOnlyHint: true,
364
+ destructiveHint: false,
365
+ idempotentHint: true,
366
+ openWorldHint: false,
367
+ },
368
+ }, async (input) => {
369
+ try {
370
+ const output = await discovery.listEvents({
371
+ search: input.search,
372
+ limit: input.limit,
373
+ tenantId: input.tenant_id,
374
+ });
375
+ return {
376
+ content: [
377
+ {
378
+ type: "text",
379
+ text: output.unavailable
380
+ ? `The event list is unavailable for tenant ${output.tenantId}: the API returned no list. Do not infer event IDs; report this to the user.`
381
+ : output.total
382
+ ? `Matched ${output.total} event${output.total === 1 ? "" : "s"}; returning ${output.count}.`
383
+ : `No event matches${output.search ? ` "${output.search}"` : ""} in tenant ${output.tenantId}.`,
384
+ },
385
+ ],
386
+ structuredContent: output,
243
387
  };
244
388
  }
389
+ catch (error) {
390
+ return toolError(error);
391
+ }
245
392
  });
246
393
  return server;
247
394
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -11719,5 +11719,5 @@
11719
11719
  ]
11720
11720
  }
11721
11721
  },
11722
- "version": "1.4.1"
11722
+ "version": "1.5.0"
11723
11723
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dataworks-technology/cli",
3
- "version": "1.4.1",
3
+ "version": "1.5.0",
4
4
  "description": "The official command-line interface for the Dataworks Data Engine",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dataworks",
3
- "version": "1.4.1",
3
+ "version": "1.5.0",
4
4
  "description": "Query athlete metrics from Dataworks using the authenticated local CLI session.",
5
5
  "author": { "name": "Dataworks Technology" },
6
6
  "homepage": "https://github.com/Dataworks-Technology/Dataworks-CLI",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dataworks",
3
- "version": "1.4.1",
3
+ "version": "1.5.0",
4
4
  "description": "Query athlete metrics from Dataworks using the authenticated local CLI session.",
5
5
  "author": { "name": "Dataworks Technology", "url": "https://dataworks.live/" },
6
6
  "homepage": "https://github.com/Dataworks-Technology/Dataworks-CLI",
@@ -1,12 +1,15 @@
1
1
  ---
2
2
  name: query-dataworks-metrics
3
- description: Query historical Dataworks athlete metrics such as GPS, heart rate, speed, altitude, cadence, power, timing, or custom metrics. Use when a user asks for latest, last, recent, or time-bounded metric values for an athlete by ID or name.
3
+ description: Query historical Dataworks metrics such as GPS, heart rate, speed, altitude, cadence, power, timing, or custom metrics, for one athlete or across a whole event. Use when a user asks for latest, last, recent, or time-bounded metric values, or needs to find an athlete or event ID.
4
4
  ---
5
5
 
6
6
  # Query Dataworks metrics
7
7
 
8
- Use the `query_metrics` tool. It is read-only and uses the current authenticated
9
- `dw` session and selected tenant.
8
+ Three read-only tools use the current authenticated `dw` session and tenant:
9
+
10
+ - `query_metrics` — metric values, scoped to an athlete, an event, or a datasource.
11
+ - `list_athletes` — find an athlete ID, or confirm someone is not in this tenant.
12
+ - `list_events` — find an event ID for a race.
10
13
 
11
14
  If `query_metrics` is unavailable, tell the user to run `dw agents install`
12
15
  once in their terminal, then start a new Codex thread or run `/reload-plugins`
@@ -14,16 +17,23 @@ in Claude Code. Do not substitute raw GraphQL or guess that setup succeeded.
14
17
 
15
18
  ## Construct the request
16
19
 
17
- - Pass `athlete_id` when the user provides a Dataworks athlete public ID.
18
- - Otherwise pass `athlete_name`; let the tool resolve it and surface ambiguity.
20
+ - Scope every query. Pass at least one of `athlete_id`, `athlete_name`,
21
+ `event_id`, or `dataset_datasource_id`; the tool refuses an unscoped query
22
+ rather than sweeping the tenant.
23
+ - For a question about a person, pass `athlete_id` when the user gives an ID,
24
+ otherwise `athlete_name` and let the tool resolve it.
25
+ - For a question about a race or feed — "the latest heart rate at T100 San
26
+ Francisco" — omit the athlete entirely and pass `event_id`. Do not invent an
27
+ athlete to satisfy the call. Rows still carry `athlete_id` per value.
19
28
  - Map the user's wording onto a canonical metric name from the catalogue below.
20
29
  Case, spaces, hyphens and underscores are ignored, so "Heart Rate" resolves to
21
30
  `heartrate`. Do not invent a metric name.
22
31
  - Default to `limit: 30` and `order: newest` only when the user did not specify
23
32
  a count or order.
24
33
  - Preserve explicit `from` and `to` times as ISO 8601 date-times.
25
- - Pass `event_id`, `dataset_datasource_id`, or `tenant_id` only when explicitly
26
- supplied or already resolved. Never guess an ID.
34
+ - Never guess or infer an ID. Resolve one with `list_athletes` or `list_events`,
35
+ or use an ID the user supplied. An ID inferred from a shared prefix, a naming
36
+ pattern, or a row count is a guess: say you could not resolve it instead.
27
37
  - For a genuinely custom metric absent from the catalogue, pass its exact name
28
38
  and an explicit `metric_category`.
29
39
 
@@ -55,6 +65,9 @@ Haigh"`, `metric: "GPS"`, `limit: 30`, `order: "newest"`.
55
65
  `metric: "heartrate"`, then take the maximum over the returned rows.
56
66
  - “Cadence for Sam since noon” → `athlete_name: "Sam"`, `metric: "cadence"`,
57
67
  `from: <the unambiguous ISO 8601 time requested>`.
68
+ - “Latest 10 heart rate values for T100 San Francisco” → `list_events` with
69
+ `search: "T100 San Francisco"` to get the ID, then `query_metrics` with
70
+ `event_id: <that ID>`, `metric: "heartrate"`, `limit: 10`, and no athlete.
58
71
 
59
72
  ## Handle results
60
73
 
@@ -63,8 +76,19 @@ environment, tenant, canonical metric, order, and returned count. GPS rows inclu
63
76
  decoded `position.latitude` and `position.longitude`; heart-rate values are
64
77
  numeric with unit `bpm` when the source value is valid.
65
78
 
66
- If the tool reports `ATHLETE_AMBIGUOUS`, present its candidates and ask the user
67
- to choose. For `AUTH_REQUIRED` or `TENANT_REQUIRED`, follow the recovery command
79
+ Every error carries a `recovery` field. Follow it rather than improvising, and
80
+ never fall back to raw GraphQL or `dw data ...` to work around a failure.
81
+
82
+ - `ATHLETE_AMBIGUOUS` — present the candidates and ask the user to choose.
83
+ - `ATHLETE_NOT_FOUND` — the athlete is not in this tenant. Do not retry with
84
+ name variations. Call `list_athletes` once to check, then tell the user.
85
+ - `QUERY_SCOPE_REQUIRED` — add an athlete, `event_id`, or
86
+ `dataset_datasource_id`.
87
+ - `METRIC_CATEGORY_REQUIRED` — retry with one of the returned `suggestions`.
88
+
89
+ If `list_events` returns `unavailable: true`, the event API returned nothing for
90
+ this session. That is a permissions problem, not proof that no events exist.
91
+ Report it and stop; do not identify an event by any other route. For `AUTH_REQUIRED` or `TENANT_REQUIRED`, follow the recovery command
68
92
  in the error and retry. For `METRIC_CATEGORY_REQUIRED`, the error's `suggestions`
69
93
  list the closest canonical names — retry with one rather than asking the user to
70
94
  spell the metric. Never expose credentials or session material.