@letpeoplework/lighthouse-mcp-core 1.3.0 → 1.4.1

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/dist/index.cjs CHANGED
@@ -185,7 +185,37 @@ var toolDefinitions = [
185
185
  },
186
186
  {
187
187
  name: "lighthouse_team_metrics_cycleTimePercentiles",
188
- description: "Get cycle-time percentiles for a team by ID, optionally filtered by start and end dates.",
188
+ description: "Get cycle-time percentiles for a team by ID, optionally filtered by start and end dates. Pass definitionId to get the percentiles for a named cycle time (premium) instead of the default cycle time.",
189
+ inputSchema: {
190
+ type: "object",
191
+ properties: {
192
+ ...idInputSchema.properties,
193
+ ...dateRangeProperties,
194
+ definitionId: {
195
+ type: "number",
196
+ description: "Optional named cycle time definition ID; omit for the default cycle time."
197
+ }
198
+ },
199
+ required: ["id"],
200
+ additionalProperties: false
201
+ }
202
+ },
203
+ {
204
+ name: "lighthouse_team_metrics_workItemAgePercentiles",
205
+ description: "Get work-item age percentiles for a team by ID, optionally filtered by start and end dates.",
206
+ inputSchema: {
207
+ type: "object",
208
+ properties: {
209
+ ...idInputSchema.properties,
210
+ ...dateRangeProperties
211
+ },
212
+ required: ["id"],
213
+ additionalProperties: false
214
+ }
215
+ },
216
+ {
217
+ name: "lighthouse_portfolio_metrics_workItemAgePercentiles",
218
+ description: "Get work-item age percentiles for a portfolio by ID, optionally filtered by start and end dates.",
189
219
  inputSchema: {
190
220
  type: "object",
191
221
  properties: {
@@ -506,6 +536,13 @@ var getNumericId = (argumentsPayload) => {
506
536
  }
507
537
  return null;
508
538
  };
539
+ var getDefinitionId = (argumentsPayload) => {
540
+ if (typeof argumentsPayload !== "object" || argumentsPayload === null || Array.isArray(argumentsPayload)) {
541
+ return void 0;
542
+ }
543
+ const value = argumentsPayload.definitionId;
544
+ return typeof value === "number" && Number.isInteger(value) ? value : void 0;
545
+ };
509
546
  var isObjectRecord = (value) => {
510
547
  return typeof value === "object" && value !== null && !Array.isArray(value);
511
548
  };
@@ -589,6 +626,17 @@ var toolInputSchemas = {
589
626
  view: import_zod.z.enum(["raw", "filtered"]).optional()
590
627
  }),
591
628
  lighthouse_team_metrics_cycleTimePercentiles: import_zod.z.object({
629
+ id: import_zod.z.number().int(),
630
+ startDate: isoDateStringSchema.optional(),
631
+ endDate: isoDateStringSchema.optional(),
632
+ definitionId: import_zod.z.number().int().optional()
633
+ }),
634
+ lighthouse_team_metrics_workItemAgePercentiles: import_zod.z.object({
635
+ id: import_zod.z.number().int(),
636
+ startDate: isoDateStringSchema.optional(),
637
+ endDate: isoDateStringSchema.optional()
638
+ }),
639
+ lighthouse_portfolio_metrics_workItemAgePercentiles: import_zod.z.object({
592
640
  id: import_zod.z.number().int(),
593
641
  startDate: isoDateStringSchema.optional(),
594
642
  endDate: isoDateStringSchema.optional()
@@ -828,7 +876,12 @@ var createMcpCoreRuntime = (dependencies) => ({
828
876
  return getErrorToolResult("team metrics: invalid id");
829
877
  }
830
878
  const range = getDateRange(argumentsPayload);
831
- const result = await client.getTeamCycleTimePercentiles(id, range);
879
+ const definitionId = getDefinitionId(argumentsPayload);
880
+ const result = await client.getTeamCycleTimePercentiles(
881
+ id,
882
+ range,
883
+ definitionId
884
+ );
832
885
  if (result.ok) {
833
886
  return getSuccessToolResult(
834
887
  `team cycleTimePercentiles: ${encodePayload(result.value)}`
@@ -838,6 +891,38 @@ var createMcpCoreRuntime = (dependencies) => ({
838
891
  `team metrics: ${result.error.category} (${result.error.reason})`
839
892
  );
840
893
  }
894
+ if (name === "lighthouse_team_metrics_workItemAgePercentiles") {
895
+ const id = getNumericId(argumentsPayload);
896
+ if (id === null) {
897
+ return getErrorToolResult("team metrics: invalid id");
898
+ }
899
+ const range = getDateRange(argumentsPayload);
900
+ const result = await client.getTeamWorkItemAgePercentiles(id, range);
901
+ if (result.ok) {
902
+ return getSuccessToolResult(
903
+ `team workItemAgePercentiles: ${encodePayload(result.value)}`
904
+ );
905
+ }
906
+ return getErrorToolResult(
907
+ `team metrics: ${result.error.category} (${result.error.reason})`
908
+ );
909
+ }
910
+ if (name === "lighthouse_portfolio_metrics_workItemAgePercentiles") {
911
+ const id = getNumericId(argumentsPayload);
912
+ if (id === null) {
913
+ return getErrorToolResult("portfolio metrics: invalid id");
914
+ }
915
+ const range = getDateRange(argumentsPayload);
916
+ const result = await client.getPortfolioWorkItemAgePercentiles(id, range);
917
+ if (result.ok) {
918
+ return getSuccessToolResult(
919
+ `portfolio workItemAgePercentiles: ${encodePayload(result.value)}`
920
+ );
921
+ }
922
+ return getErrorToolResult(
923
+ `portfolio metrics: ${result.error.category} (${result.error.reason})`
924
+ );
925
+ }
841
926
  if (name === "lighthouse_team_metrics_cumulativeStateTime") {
842
927
  const id = getNumericId(argumentsPayload);
843
928
  if (id === null) {
package/dist/index.d.cts CHANGED
@@ -15,7 +15,7 @@ type McpToolResult = {
15
15
  readonly content: readonly McpToolContent[];
16
16
  };
17
17
  type McpToolDefinition = {
18
- readonly name: "lighthouse_health_check" | "lighthouse_version_get" | "lighthouse_worktracking_list" | "lighthouse_worktracking_get" | "lighthouse_team_list" | "lighthouse_team_get" | "lighthouse_team_refresh" | "lighthouse_portfolio_list" | "lighthouse_portfolio_get" | "lighthouse_portfolio_refresh" | "lighthouse_team_metrics_throughput" | "lighthouse_team_metrics_cycleTimePercentiles" | "lighthouse_team_metrics_workItemAge" | "lighthouse_team_metrics_totalWorkItemAge" | "lighthouse_portfolio_metrics_throughput" | "lighthouse_portfolio_metrics_workItemAge" | "lighthouse_portfolio_metrics_totalWorkItemAge" | "lighthouse_team_metrics_cumulativeStateTime" | "lighthouse_team_metrics_cumulativeStateTimeItems" | "lighthouse_team_metrics_cumulativeStateTimeCandidates" | "lighthouse_portfolio_metrics_cumulativeStateTime" | "lighthouse_portfolio_metrics_cumulativeStateTimeItems" | "lighthouse_portfolio_metrics_cumulativeStateTimeCandidates" | "lighthouse_feature_get" | "lighthouse_feature_workitems" | "lighthouse_delivery_list" | "lighthouse_blackout_list" | "lighthouse_blackout_create" | "lighthouse_blackout_update" | "lighthouse_blackout_delete" | "lighthouse_forecast_manual" | "lighthouse_forecast_backtest";
18
+ readonly name: "lighthouse_health_check" | "lighthouse_version_get" | "lighthouse_worktracking_list" | "lighthouse_worktracking_get" | "lighthouse_team_list" | "lighthouse_team_get" | "lighthouse_team_refresh" | "lighthouse_portfolio_list" | "lighthouse_portfolio_get" | "lighthouse_portfolio_refresh" | "lighthouse_team_metrics_throughput" | "lighthouse_team_metrics_cycleTimePercentiles" | "lighthouse_team_metrics_workItemAgePercentiles" | "lighthouse_portfolio_metrics_workItemAgePercentiles" | "lighthouse_team_metrics_workItemAge" | "lighthouse_team_metrics_totalWorkItemAge" | "lighthouse_portfolio_metrics_throughput" | "lighthouse_portfolio_metrics_workItemAge" | "lighthouse_portfolio_metrics_totalWorkItemAge" | "lighthouse_team_metrics_cumulativeStateTime" | "lighthouse_team_metrics_cumulativeStateTimeItems" | "lighthouse_team_metrics_cumulativeStateTimeCandidates" | "lighthouse_portfolio_metrics_cumulativeStateTime" | "lighthouse_portfolio_metrics_cumulativeStateTimeItems" | "lighthouse_portfolio_metrics_cumulativeStateTimeCandidates" | "lighthouse_feature_get" | "lighthouse_feature_workitems" | "lighthouse_delivery_list" | "lighthouse_blackout_list" | "lighthouse_blackout_create" | "lighthouse_blackout_update" | "lighthouse_blackout_delete" | "lighthouse_forecast_manual" | "lighthouse_forecast_backtest";
19
19
  readonly description: string;
20
20
  readonly inputSchema: {
21
21
  readonly type: "object";
@@ -135,6 +135,32 @@ type McpRuntimeClient = {
135
135
  readonly getTeamCycleTimePercentiles: (id: number, range?: {
136
136
  readonly startDate: string;
137
137
  readonly endDate: string;
138
+ }, definitionId?: number) => Promise<{
139
+ readonly ok: true;
140
+ readonly value: readonly unknown[];
141
+ } | {
142
+ readonly ok: false;
143
+ readonly error: {
144
+ readonly category: string;
145
+ readonly reason: string;
146
+ };
147
+ }>;
148
+ readonly getTeamWorkItemAgePercentiles: (id: number, range?: {
149
+ readonly startDate: string;
150
+ readonly endDate: string;
151
+ }) => Promise<{
152
+ readonly ok: true;
153
+ readonly value: readonly unknown[];
154
+ } | {
155
+ readonly ok: false;
156
+ readonly error: {
157
+ readonly category: string;
158
+ readonly reason: string;
159
+ };
160
+ }>;
161
+ readonly getPortfolioWorkItemAgePercentiles: (id: number, range?: {
162
+ readonly startDate: string;
163
+ readonly endDate: string;
138
164
  }) => Promise<{
139
165
  readonly ok: true;
140
166
  readonly value: readonly unknown[];
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ type McpToolResult = {
15
15
  readonly content: readonly McpToolContent[];
16
16
  };
17
17
  type McpToolDefinition = {
18
- readonly name: "lighthouse_health_check" | "lighthouse_version_get" | "lighthouse_worktracking_list" | "lighthouse_worktracking_get" | "lighthouse_team_list" | "lighthouse_team_get" | "lighthouse_team_refresh" | "lighthouse_portfolio_list" | "lighthouse_portfolio_get" | "lighthouse_portfolio_refresh" | "lighthouse_team_metrics_throughput" | "lighthouse_team_metrics_cycleTimePercentiles" | "lighthouse_team_metrics_workItemAge" | "lighthouse_team_metrics_totalWorkItemAge" | "lighthouse_portfolio_metrics_throughput" | "lighthouse_portfolio_metrics_workItemAge" | "lighthouse_portfolio_metrics_totalWorkItemAge" | "lighthouse_team_metrics_cumulativeStateTime" | "lighthouse_team_metrics_cumulativeStateTimeItems" | "lighthouse_team_metrics_cumulativeStateTimeCandidates" | "lighthouse_portfolio_metrics_cumulativeStateTime" | "lighthouse_portfolio_metrics_cumulativeStateTimeItems" | "lighthouse_portfolio_metrics_cumulativeStateTimeCandidates" | "lighthouse_feature_get" | "lighthouse_feature_workitems" | "lighthouse_delivery_list" | "lighthouse_blackout_list" | "lighthouse_blackout_create" | "lighthouse_blackout_update" | "lighthouse_blackout_delete" | "lighthouse_forecast_manual" | "lighthouse_forecast_backtest";
18
+ readonly name: "lighthouse_health_check" | "lighthouse_version_get" | "lighthouse_worktracking_list" | "lighthouse_worktracking_get" | "lighthouse_team_list" | "lighthouse_team_get" | "lighthouse_team_refresh" | "lighthouse_portfolio_list" | "lighthouse_portfolio_get" | "lighthouse_portfolio_refresh" | "lighthouse_team_metrics_throughput" | "lighthouse_team_metrics_cycleTimePercentiles" | "lighthouse_team_metrics_workItemAgePercentiles" | "lighthouse_portfolio_metrics_workItemAgePercentiles" | "lighthouse_team_metrics_workItemAge" | "lighthouse_team_metrics_totalWorkItemAge" | "lighthouse_portfolio_metrics_throughput" | "lighthouse_portfolio_metrics_workItemAge" | "lighthouse_portfolio_metrics_totalWorkItemAge" | "lighthouse_team_metrics_cumulativeStateTime" | "lighthouse_team_metrics_cumulativeStateTimeItems" | "lighthouse_team_metrics_cumulativeStateTimeCandidates" | "lighthouse_portfolio_metrics_cumulativeStateTime" | "lighthouse_portfolio_metrics_cumulativeStateTimeItems" | "lighthouse_portfolio_metrics_cumulativeStateTimeCandidates" | "lighthouse_feature_get" | "lighthouse_feature_workitems" | "lighthouse_delivery_list" | "lighthouse_blackout_list" | "lighthouse_blackout_create" | "lighthouse_blackout_update" | "lighthouse_blackout_delete" | "lighthouse_forecast_manual" | "lighthouse_forecast_backtest";
19
19
  readonly description: string;
20
20
  readonly inputSchema: {
21
21
  readonly type: "object";
@@ -135,6 +135,32 @@ type McpRuntimeClient = {
135
135
  readonly getTeamCycleTimePercentiles: (id: number, range?: {
136
136
  readonly startDate: string;
137
137
  readonly endDate: string;
138
+ }, definitionId?: number) => Promise<{
139
+ readonly ok: true;
140
+ readonly value: readonly unknown[];
141
+ } | {
142
+ readonly ok: false;
143
+ readonly error: {
144
+ readonly category: string;
145
+ readonly reason: string;
146
+ };
147
+ }>;
148
+ readonly getTeamWorkItemAgePercentiles: (id: number, range?: {
149
+ readonly startDate: string;
150
+ readonly endDate: string;
151
+ }) => Promise<{
152
+ readonly ok: true;
153
+ readonly value: readonly unknown[];
154
+ } | {
155
+ readonly ok: false;
156
+ readonly error: {
157
+ readonly category: string;
158
+ readonly reason: string;
159
+ };
160
+ }>;
161
+ readonly getPortfolioWorkItemAgePercentiles: (id: number, range?: {
162
+ readonly startDate: string;
163
+ readonly endDate: string;
138
164
  }) => Promise<{
139
165
  readonly ok: true;
140
166
  readonly value: readonly unknown[];
package/dist/index.js CHANGED
@@ -159,7 +159,37 @@ var toolDefinitions = [
159
159
  },
160
160
  {
161
161
  name: "lighthouse_team_metrics_cycleTimePercentiles",
162
- description: "Get cycle-time percentiles for a team by ID, optionally filtered by start and end dates.",
162
+ description: "Get cycle-time percentiles for a team by ID, optionally filtered by start and end dates. Pass definitionId to get the percentiles for a named cycle time (premium) instead of the default cycle time.",
163
+ inputSchema: {
164
+ type: "object",
165
+ properties: {
166
+ ...idInputSchema.properties,
167
+ ...dateRangeProperties,
168
+ definitionId: {
169
+ type: "number",
170
+ description: "Optional named cycle time definition ID; omit for the default cycle time."
171
+ }
172
+ },
173
+ required: ["id"],
174
+ additionalProperties: false
175
+ }
176
+ },
177
+ {
178
+ name: "lighthouse_team_metrics_workItemAgePercentiles",
179
+ description: "Get work-item age percentiles for a team by ID, optionally filtered by start and end dates.",
180
+ inputSchema: {
181
+ type: "object",
182
+ properties: {
183
+ ...idInputSchema.properties,
184
+ ...dateRangeProperties
185
+ },
186
+ required: ["id"],
187
+ additionalProperties: false
188
+ }
189
+ },
190
+ {
191
+ name: "lighthouse_portfolio_metrics_workItemAgePercentiles",
192
+ description: "Get work-item age percentiles for a portfolio by ID, optionally filtered by start and end dates.",
163
193
  inputSchema: {
164
194
  type: "object",
165
195
  properties: {
@@ -480,6 +510,13 @@ var getNumericId = (argumentsPayload) => {
480
510
  }
481
511
  return null;
482
512
  };
513
+ var getDefinitionId = (argumentsPayload) => {
514
+ if (typeof argumentsPayload !== "object" || argumentsPayload === null || Array.isArray(argumentsPayload)) {
515
+ return void 0;
516
+ }
517
+ const value = argumentsPayload.definitionId;
518
+ return typeof value === "number" && Number.isInteger(value) ? value : void 0;
519
+ };
483
520
  var isObjectRecord = (value) => {
484
521
  return typeof value === "object" && value !== null && !Array.isArray(value);
485
522
  };
@@ -563,6 +600,17 @@ var toolInputSchemas = {
563
600
  view: z.enum(["raw", "filtered"]).optional()
564
601
  }),
565
602
  lighthouse_team_metrics_cycleTimePercentiles: z.object({
603
+ id: z.number().int(),
604
+ startDate: isoDateStringSchema.optional(),
605
+ endDate: isoDateStringSchema.optional(),
606
+ definitionId: z.number().int().optional()
607
+ }),
608
+ lighthouse_team_metrics_workItemAgePercentiles: z.object({
609
+ id: z.number().int(),
610
+ startDate: isoDateStringSchema.optional(),
611
+ endDate: isoDateStringSchema.optional()
612
+ }),
613
+ lighthouse_portfolio_metrics_workItemAgePercentiles: z.object({
566
614
  id: z.number().int(),
567
615
  startDate: isoDateStringSchema.optional(),
568
616
  endDate: isoDateStringSchema.optional()
@@ -802,7 +850,12 @@ var createMcpCoreRuntime = (dependencies) => ({
802
850
  return getErrorToolResult("team metrics: invalid id");
803
851
  }
804
852
  const range = getDateRange(argumentsPayload);
805
- const result = await client.getTeamCycleTimePercentiles(id, range);
853
+ const definitionId = getDefinitionId(argumentsPayload);
854
+ const result = await client.getTeamCycleTimePercentiles(
855
+ id,
856
+ range,
857
+ definitionId
858
+ );
806
859
  if (result.ok) {
807
860
  return getSuccessToolResult(
808
861
  `team cycleTimePercentiles: ${encodePayload(result.value)}`
@@ -812,6 +865,38 @@ var createMcpCoreRuntime = (dependencies) => ({
812
865
  `team metrics: ${result.error.category} (${result.error.reason})`
813
866
  );
814
867
  }
868
+ if (name === "lighthouse_team_metrics_workItemAgePercentiles") {
869
+ const id = getNumericId(argumentsPayload);
870
+ if (id === null) {
871
+ return getErrorToolResult("team metrics: invalid id");
872
+ }
873
+ const range = getDateRange(argumentsPayload);
874
+ const result = await client.getTeamWorkItemAgePercentiles(id, range);
875
+ if (result.ok) {
876
+ return getSuccessToolResult(
877
+ `team workItemAgePercentiles: ${encodePayload(result.value)}`
878
+ );
879
+ }
880
+ return getErrorToolResult(
881
+ `team metrics: ${result.error.category} (${result.error.reason})`
882
+ );
883
+ }
884
+ if (name === "lighthouse_portfolio_metrics_workItemAgePercentiles") {
885
+ const id = getNumericId(argumentsPayload);
886
+ if (id === null) {
887
+ return getErrorToolResult("portfolio metrics: invalid id");
888
+ }
889
+ const range = getDateRange(argumentsPayload);
890
+ const result = await client.getPortfolioWorkItemAgePercentiles(id, range);
891
+ if (result.ok) {
892
+ return getSuccessToolResult(
893
+ `portfolio workItemAgePercentiles: ${encodePayload(result.value)}`
894
+ );
895
+ }
896
+ return getErrorToolResult(
897
+ `portfolio metrics: ${result.error.category} (${result.error.reason})`
898
+ );
899
+ }
815
900
  if (name === "lighthouse_team_metrics_cumulativeStateTime") {
816
901
  const id = getNumericId(argumentsPayload);
817
902
  if (id === null) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letpeoplework/lighthouse-mcp-core",
3
- "version": "1.3.0",
3
+ "version": "1.4.1",
4
4
  "description": "Shared MCP semantics for Lighthouse",
5
5
  "repository": "https://github.com/LetPeopleWork/lighthouse-clients",
6
6
  "type": "module",
@@ -26,7 +26,7 @@
26
26
  "@modelcontextprotocol/sdk": "^1.26.0",
27
27
  "@toon-format/toon": "^2.1.0",
28
28
  "zod": "^3.24.1",
29
- "@letpeoplework/lighthouse-client": "1.3.0"
29
+ "@letpeoplework/lighthouse-client": "1.5.0"
30
30
  },
31
31
  "scripts": {
32
32
  "build": "tsup src/index.ts --format esm,cjs --dts --clean",