@letpeoplework/lighthouse-mcp-core 0.6.0 → 0.7.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/dist/index.cjs CHANGED
@@ -60,57 +60,57 @@ var dateRangeProperties = {
60
60
  };
61
61
  var toolDefinitions = [
62
62
  {
63
- name: "lighthouse.health.check",
63
+ name: "lighthouse_health_check",
64
64
  description: "Check connectivity to Lighthouse and return whether the configured endpoint is reachable.",
65
65
  inputSchema: emptyInputSchema
66
66
  },
67
67
  {
68
- name: "lighthouse.version.get",
68
+ name: "lighthouse_version_get",
69
69
  description: "Retrieve the Lighthouse server version from the version endpoint.",
70
70
  inputSchema: emptyInputSchema
71
71
  },
72
72
  {
73
- name: "lighthouse.worktracking.list",
73
+ name: "lighthouse_worktracking_list",
74
74
  description: "List configured work-tracking system connections in Lighthouse.",
75
75
  inputSchema: emptyInputSchema
76
76
  },
77
77
  {
78
- name: "lighthouse.worktracking.get",
78
+ name: "lighthouse_worktracking_get",
79
79
  description: "Get a single work-tracking system connection by ID.",
80
80
  inputSchema: idInputSchema
81
81
  },
82
82
  {
83
- name: "lighthouse.team.list",
83
+ name: "lighthouse_team_list",
84
84
  description: "List all teams available in Lighthouse.",
85
85
  inputSchema: emptyInputSchema
86
86
  },
87
87
  {
88
- name: "lighthouse.team.get",
88
+ name: "lighthouse_team_get",
89
89
  description: "Get full details for one team by ID.",
90
90
  inputSchema: idInputSchema
91
91
  },
92
92
  {
93
- name: "lighthouse.team.refresh",
93
+ name: "lighthouse_team_refresh",
94
94
  description: "Trigger data refresh for a team by ID.",
95
95
  inputSchema: idInputSchema
96
96
  },
97
97
  {
98
- name: "lighthouse.portfolio.list",
98
+ name: "lighthouse_portfolio_list",
99
99
  description: "List all portfolios in Lighthouse.",
100
100
  inputSchema: emptyInputSchema
101
101
  },
102
102
  {
103
- name: "lighthouse.portfolio.get",
103
+ name: "lighthouse_portfolio_get",
104
104
  description: "Get full details for one portfolio by ID.",
105
105
  inputSchema: idInputSchema
106
106
  },
107
107
  {
108
- name: "lighthouse.portfolio.refresh",
108
+ name: "lighthouse_portfolio_refresh",
109
109
  description: "Trigger data refresh for a portfolio by ID.",
110
110
  inputSchema: idInputSchema
111
111
  },
112
112
  {
113
- name: "lighthouse.team.metrics.throughput",
113
+ name: "lighthouse_team_metrics_throughput",
114
114
  description: "Get throughput run-chart data for a team by ID, optionally filtered by start and end dates.",
115
115
  inputSchema: {
116
116
  type: "object",
@@ -123,7 +123,7 @@ var toolDefinitions = [
123
123
  }
124
124
  },
125
125
  {
126
- name: "lighthouse.team.metrics.cycleTimePercentiles",
126
+ name: "lighthouse_team_metrics_cycleTimePercentiles",
127
127
  description: "Get cycle-time percentiles for a team by ID, optionally filtered by start and end dates.",
128
128
  inputSchema: {
129
129
  type: "object",
@@ -136,7 +136,7 @@ var toolDefinitions = [
136
136
  }
137
137
  },
138
138
  {
139
- name: "lighthouse.portfolio.metrics.throughput",
139
+ name: "lighthouse_portfolio_metrics_throughput",
140
140
  description: "Get throughput run-chart data for a portfolio by ID, optionally filtered by start and end dates.",
141
141
  inputSchema: {
142
142
  type: "object",
@@ -149,7 +149,7 @@ var toolDefinitions = [
149
149
  }
150
150
  },
151
151
  {
152
- name: "lighthouse.feature.get",
152
+ name: "lighthouse_feature_get",
153
153
  description: "Get feature details by numeric IDs or external reference IDs.",
154
154
  inputSchema: {
155
155
  type: "object",
@@ -173,17 +173,17 @@ var toolDefinitions = [
173
173
  }
174
174
  },
175
175
  {
176
- name: "lighthouse.feature.workitems",
176
+ name: "lighthouse_feature_workitems",
177
177
  description: "Get work items linked to a feature by ID.",
178
178
  inputSchema: idInputSchema
179
179
  },
180
180
  {
181
- name: "lighthouse.delivery.list",
181
+ name: "lighthouse_delivery_list",
182
182
  description: "List deliveries for a portfolio by portfolio ID.",
183
183
  inputSchema: idInputSchema
184
184
  },
185
185
  {
186
- name: "lighthouse.forecast.manual",
186
+ name: "lighthouse_forecast_manual",
187
187
  description: "Run a manual forecast for a team by ID with optional remaining items and target date.",
188
188
  inputSchema: {
189
189
  type: "object",
@@ -203,7 +203,7 @@ var toolDefinitions = [
203
203
  }
204
204
  },
205
205
  {
206
- name: "lighthouse.forecast.backtest",
206
+ name: "lighthouse_forecast_backtest",
207
207
  description: "Run a forecast backtest for a team by ID using forecast and historical date ranges.",
208
208
  inputSchema: {
209
209
  type: "object",
@@ -288,43 +288,43 @@ var getDateRange = (argumentsPayload) => {
288
288
  };
289
289
  var isoDateStringSchema = import_zod.z.string().regex(/^\d{4}-\d{2}-\d{2}$/u, "Expected ISO date in YYYY-MM-DD format.");
290
290
  var toolInputSchemas = {
291
- "lighthouse.health.check": import_zod.z.object({}),
292
- "lighthouse.version.get": import_zod.z.object({}),
293
- "lighthouse.worktracking.list": import_zod.z.object({}),
294
- "lighthouse.worktracking.get": import_zod.z.object({ id: import_zod.z.number().int() }),
295
- "lighthouse.team.list": import_zod.z.object({}),
296
- "lighthouse.team.get": import_zod.z.object({ id: import_zod.z.number().int() }),
297
- "lighthouse.team.refresh": import_zod.z.object({ id: import_zod.z.number().int() }),
298
- "lighthouse.portfolio.list": import_zod.z.object({}),
299
- "lighthouse.portfolio.get": import_zod.z.object({ id: import_zod.z.number().int() }),
300
- "lighthouse.portfolio.refresh": import_zod.z.object({ id: import_zod.z.number().int() }),
301
- "lighthouse.team.metrics.throughput": import_zod.z.object({
291
+ lighthouse_health_check: import_zod.z.object({}),
292
+ lighthouse_version_get: import_zod.z.object({}),
293
+ lighthouse_worktracking_list: import_zod.z.object({}),
294
+ lighthouse_worktracking_get: import_zod.z.object({ id: import_zod.z.number().int() }),
295
+ lighthouse_team_list: import_zod.z.object({}),
296
+ lighthouse_team_get: import_zod.z.object({ id: import_zod.z.number().int() }),
297
+ lighthouse_team_refresh: import_zod.z.object({ id: import_zod.z.number().int() }),
298
+ lighthouse_portfolio_list: import_zod.z.object({}),
299
+ lighthouse_portfolio_get: import_zod.z.object({ id: import_zod.z.number().int() }),
300
+ lighthouse_portfolio_refresh: import_zod.z.object({ id: import_zod.z.number().int() }),
301
+ lighthouse_team_metrics_throughput: import_zod.z.object({
302
302
  id: import_zod.z.number().int(),
303
303
  startDate: isoDateStringSchema.optional(),
304
304
  endDate: isoDateStringSchema.optional()
305
305
  }),
306
- "lighthouse.team.metrics.cycleTimePercentiles": import_zod.z.object({
306
+ lighthouse_team_metrics_cycleTimePercentiles: import_zod.z.object({
307
307
  id: import_zod.z.number().int(),
308
308
  startDate: isoDateStringSchema.optional(),
309
309
  endDate: isoDateStringSchema.optional()
310
310
  }),
311
- "lighthouse.portfolio.metrics.throughput": import_zod.z.object({
311
+ lighthouse_portfolio_metrics_throughput: import_zod.z.object({
312
312
  id: import_zod.z.number().int(),
313
313
  startDate: isoDateStringSchema.optional(),
314
314
  endDate: isoDateStringSchema.optional()
315
315
  }),
316
- "lighthouse.feature.get": import_zod.z.object({
316
+ lighthouse_feature_get: import_zod.z.object({
317
317
  ids: import_zod.z.array(import_zod.z.number().int()).optional(),
318
318
  refs: import_zod.z.array(import_zod.z.string()).optional()
319
319
  }),
320
- "lighthouse.feature.workitems": import_zod.z.object({ id: import_zod.z.number().int() }),
321
- "lighthouse.delivery.list": import_zod.z.object({ id: import_zod.z.number().int() }),
322
- "lighthouse.forecast.manual": import_zod.z.object({
320
+ lighthouse_feature_workitems: import_zod.z.object({ id: import_zod.z.number().int() }),
321
+ lighthouse_delivery_list: import_zod.z.object({ id: import_zod.z.number().int() }),
322
+ lighthouse_forecast_manual: import_zod.z.object({
323
323
  id: import_zod.z.number().int(),
324
324
  remainingItems: import_zod.z.number().int().optional(),
325
325
  targetDate: isoDateStringSchema.optional()
326
326
  }),
327
- "lighthouse.forecast.backtest": import_zod.z.object({
327
+ lighthouse_forecast_backtest: import_zod.z.object({
328
328
  id: import_zod.z.number().int(),
329
329
  startDate: isoDateStringSchema,
330
330
  endDate: isoDateStringSchema,
@@ -332,12 +332,12 @@ var toolInputSchemas = {
332
332
  historicalEndDate: isoDateStringSchema
333
333
  })
334
334
  };
335
- var isReadOnlyTool = (toolName) => !toolName.endsWith(".refresh");
335
+ var isReadOnlyTool = (toolName) => !toolName.endsWith("_refresh");
336
336
  var createMcpCoreRuntime = (dependencies) => ({
337
337
  listTools: () => toolDefinitions,
338
338
  callTool: async (name, argumentsPayload) => {
339
339
  const client = dependencies.createClient();
340
- if (name === "lighthouse.health.check") {
340
+ if (name === "lighthouse_health_check") {
341
341
  const health = await client.checkConnectivity();
342
342
  if (health.category === "success") {
343
343
  return getSuccessToolResult("connectivity: success");
@@ -347,7 +347,7 @@ var createMcpCoreRuntime = (dependencies) => ({
347
347
  `connectivity: ${health.category}${healthReasonSuffix}`
348
348
  );
349
349
  }
350
- if (name === "lighthouse.version.get") {
350
+ if (name === "lighthouse_version_get") {
351
351
  const version = await client.getVersion();
352
352
  if (version.ok) {
353
353
  return getSuccessToolResult(`version: ${version.value}`);
@@ -356,7 +356,7 @@ var createMcpCoreRuntime = (dependencies) => ({
356
356
  `version: ${version.error.category} (${version.error.reason})`
357
357
  );
358
358
  }
359
- if (name === "lighthouse.worktracking.list") {
359
+ if (name === "lighthouse_worktracking_list") {
360
360
  const connections = await client.listWorkTrackingConnections();
361
361
  if (connections.ok) {
362
362
  return getSuccessToolResult(
@@ -367,7 +367,7 @@ var createMcpCoreRuntime = (dependencies) => ({
367
367
  `worktracking: ${connections.error.category} (${connections.error.reason})`
368
368
  );
369
369
  }
370
- if (name === "lighthouse.worktracking.get") {
370
+ if (name === "lighthouse_worktracking_get") {
371
371
  const id = getNumericId(argumentsPayload);
372
372
  if (id === null) {
373
373
  return getErrorToolResult("worktracking: invalid id");
@@ -382,7 +382,7 @@ var createMcpCoreRuntime = (dependencies) => ({
382
382
  `worktracking: ${connection.error.category} (${connection.error.reason})`
383
383
  );
384
384
  }
385
- if (name === "lighthouse.team.list") {
385
+ if (name === "lighthouse_team_list") {
386
386
  const teams = await client.listTeams();
387
387
  if (teams.ok) {
388
388
  return getSuccessToolResult(`teams: ${encodePayload(teams.value)}`);
@@ -391,7 +391,7 @@ var createMcpCoreRuntime = (dependencies) => ({
391
391
  `teams: ${teams.error.category} (${teams.error.reason})`
392
392
  );
393
393
  }
394
- if (name === "lighthouse.team.get") {
394
+ if (name === "lighthouse_team_get") {
395
395
  const id = getNumericId(argumentsPayload);
396
396
  if (id === null) {
397
397
  return getErrorToolResult("team: invalid id");
@@ -404,7 +404,7 @@ var createMcpCoreRuntime = (dependencies) => ({
404
404
  `team: ${team.error.category} (${team.error.reason})`
405
405
  );
406
406
  }
407
- if (name === "lighthouse.team.refresh") {
407
+ if (name === "lighthouse_team_refresh") {
408
408
  const id = getNumericId(argumentsPayload);
409
409
  if (id === null) {
410
410
  return getErrorToolResult("team: invalid id");
@@ -417,7 +417,7 @@ var createMcpCoreRuntime = (dependencies) => ({
417
417
  `team refresh: ${result.error.category} (${result.error.reason})`
418
418
  );
419
419
  }
420
- if (name === "lighthouse.portfolio.list") {
420
+ if (name === "lighthouse_portfolio_list") {
421
421
  const portfolios = await client.listPortfolios();
422
422
  if (portfolios.ok) {
423
423
  return getSuccessToolResult(
@@ -428,7 +428,7 @@ var createMcpCoreRuntime = (dependencies) => ({
428
428
  `portfolios: ${portfolios.error.category} (${portfolios.error.reason})`
429
429
  );
430
430
  }
431
- if (name === "lighthouse.portfolio.get") {
431
+ if (name === "lighthouse_portfolio_get") {
432
432
  const id = getNumericId(argumentsPayload);
433
433
  if (id === null) {
434
434
  return getErrorToolResult("portfolio: invalid id");
@@ -443,7 +443,7 @@ var createMcpCoreRuntime = (dependencies) => ({
443
443
  `portfolio: ${portfolio.error.category} (${portfolio.error.reason})`
444
444
  );
445
445
  }
446
- if (name === "lighthouse.portfolio.refresh") {
446
+ if (name === "lighthouse_portfolio_refresh") {
447
447
  const id = getNumericId(argumentsPayload);
448
448
  if (id === null) {
449
449
  return getErrorToolResult("portfolio: invalid id");
@@ -456,7 +456,7 @@ var createMcpCoreRuntime = (dependencies) => ({
456
456
  `portfolio refresh: ${result.error.category} (${result.error.reason})`
457
457
  );
458
458
  }
459
- if (name === "lighthouse.team.metrics.throughput") {
459
+ if (name === "lighthouse_team_metrics_throughput") {
460
460
  const id = getNumericId(argumentsPayload);
461
461
  if (id === null) {
462
462
  return getErrorToolResult("team metrics: invalid id");
@@ -472,7 +472,7 @@ var createMcpCoreRuntime = (dependencies) => ({
472
472
  `team metrics: ${result.error.category} (${result.error.reason})`
473
473
  );
474
474
  }
475
- if (name === "lighthouse.team.metrics.cycleTimePercentiles") {
475
+ if (name === "lighthouse_team_metrics_cycleTimePercentiles") {
476
476
  const id = getNumericId(argumentsPayload);
477
477
  if (id === null) {
478
478
  return getErrorToolResult("team metrics: invalid id");
@@ -488,7 +488,7 @@ var createMcpCoreRuntime = (dependencies) => ({
488
488
  `team metrics: ${result.error.category} (${result.error.reason})`
489
489
  );
490
490
  }
491
- if (name === "lighthouse.portfolio.metrics.throughput") {
491
+ if (name === "lighthouse_portfolio_metrics_throughput") {
492
492
  const id = getNumericId(argumentsPayload);
493
493
  if (id === null) {
494
494
  return getErrorToolResult("portfolio metrics: invalid id");
@@ -504,7 +504,7 @@ var createMcpCoreRuntime = (dependencies) => ({
504
504
  `portfolio metrics: ${result.error.category} (${result.error.reason})`
505
505
  );
506
506
  }
507
- if (name === "lighthouse.feature.get") {
507
+ if (name === "lighthouse_feature_get") {
508
508
  const payload = isObjectRecord(argumentsPayload) ? argumentsPayload : {};
509
509
  const idsValue = payload.ids;
510
510
  const refsValue = payload.refs;
@@ -538,7 +538,7 @@ var createMcpCoreRuntime = (dependencies) => ({
538
538
  "features: provide ids (array of numbers) or refs (array of strings)"
539
539
  );
540
540
  }
541
- if (name === "lighthouse.feature.workitems") {
541
+ if (name === "lighthouse_feature_workitems") {
542
542
  const id = getNumericId(argumentsPayload);
543
543
  if (id === null) {
544
544
  return getErrorToolResult("feature workitems: invalid id");
@@ -553,7 +553,7 @@ var createMcpCoreRuntime = (dependencies) => ({
553
553
  `feature workitems: ${result.error.category} (${result.error.reason})`
554
554
  );
555
555
  }
556
- if (name === "lighthouse.delivery.list") {
556
+ if (name === "lighthouse_delivery_list") {
557
557
  const id = getNumericId(argumentsPayload);
558
558
  if (id === null) {
559
559
  return getErrorToolResult(
@@ -570,7 +570,7 @@ var createMcpCoreRuntime = (dependencies) => ({
570
570
  `delivery: ${result.error.category} (${result.error.reason})`
571
571
  );
572
572
  }
573
- if (name === "lighthouse.forecast.manual") {
573
+ if (name === "lighthouse_forecast_manual") {
574
574
  const id = getNumericId(argumentsPayload);
575
575
  if (id === null) {
576
576
  return getErrorToolResult("forecast: invalid id (team id required)");
@@ -589,7 +589,7 @@ var createMcpCoreRuntime = (dependencies) => ({
589
589
  `forecast: ${result.error.category} (${result.error.reason})`
590
590
  );
591
591
  }
592
- if (name === "lighthouse.forecast.backtest") {
592
+ if (name === "lighthouse_forecast_backtest") {
593
593
  const id = getNumericId(argumentsPayload);
594
594
  if (id === null) {
595
595
  return getErrorToolResult("backtest: invalid id (team id required)");
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.portfolio.metrics.throughput" | "lighthouse.feature.get" | "lighthouse.feature.workitems" | "lighthouse.delivery.list" | "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_portfolio_metrics_throughput" | "lighthouse_feature_get" | "lighthouse_feature_workitems" | "lighthouse_delivery_list" | "lighthouse_forecast_manual" | "lighthouse_forecast_backtest";
19
19
  readonly description: string;
20
20
  readonly inputSchema: {
21
21
  readonly type: "object";
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.portfolio.metrics.throughput" | "lighthouse.feature.get" | "lighthouse.feature.workitems" | "lighthouse.delivery.list" | "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_portfolio_metrics_throughput" | "lighthouse_feature_get" | "lighthouse_feature_workitems" | "lighthouse_delivery_list" | "lighthouse_forecast_manual" | "lighthouse_forecast_backtest";
19
19
  readonly description: string;
20
20
  readonly inputSchema: {
21
21
  readonly type: "object";
package/dist/index.js CHANGED
@@ -34,57 +34,57 @@ var dateRangeProperties = {
34
34
  };
35
35
  var toolDefinitions = [
36
36
  {
37
- name: "lighthouse.health.check",
37
+ name: "lighthouse_health_check",
38
38
  description: "Check connectivity to Lighthouse and return whether the configured endpoint is reachable.",
39
39
  inputSchema: emptyInputSchema
40
40
  },
41
41
  {
42
- name: "lighthouse.version.get",
42
+ name: "lighthouse_version_get",
43
43
  description: "Retrieve the Lighthouse server version from the version endpoint.",
44
44
  inputSchema: emptyInputSchema
45
45
  },
46
46
  {
47
- name: "lighthouse.worktracking.list",
47
+ name: "lighthouse_worktracking_list",
48
48
  description: "List configured work-tracking system connections in Lighthouse.",
49
49
  inputSchema: emptyInputSchema
50
50
  },
51
51
  {
52
- name: "lighthouse.worktracking.get",
52
+ name: "lighthouse_worktracking_get",
53
53
  description: "Get a single work-tracking system connection by ID.",
54
54
  inputSchema: idInputSchema
55
55
  },
56
56
  {
57
- name: "lighthouse.team.list",
57
+ name: "lighthouse_team_list",
58
58
  description: "List all teams available in Lighthouse.",
59
59
  inputSchema: emptyInputSchema
60
60
  },
61
61
  {
62
- name: "lighthouse.team.get",
62
+ name: "lighthouse_team_get",
63
63
  description: "Get full details for one team by ID.",
64
64
  inputSchema: idInputSchema
65
65
  },
66
66
  {
67
- name: "lighthouse.team.refresh",
67
+ name: "lighthouse_team_refresh",
68
68
  description: "Trigger data refresh for a team by ID.",
69
69
  inputSchema: idInputSchema
70
70
  },
71
71
  {
72
- name: "lighthouse.portfolio.list",
72
+ name: "lighthouse_portfolio_list",
73
73
  description: "List all portfolios in Lighthouse.",
74
74
  inputSchema: emptyInputSchema
75
75
  },
76
76
  {
77
- name: "lighthouse.portfolio.get",
77
+ name: "lighthouse_portfolio_get",
78
78
  description: "Get full details for one portfolio by ID.",
79
79
  inputSchema: idInputSchema
80
80
  },
81
81
  {
82
- name: "lighthouse.portfolio.refresh",
82
+ name: "lighthouse_portfolio_refresh",
83
83
  description: "Trigger data refresh for a portfolio by ID.",
84
84
  inputSchema: idInputSchema
85
85
  },
86
86
  {
87
- name: "lighthouse.team.metrics.throughput",
87
+ name: "lighthouse_team_metrics_throughput",
88
88
  description: "Get throughput run-chart data for a team by ID, optionally filtered by start and end dates.",
89
89
  inputSchema: {
90
90
  type: "object",
@@ -97,7 +97,7 @@ var toolDefinitions = [
97
97
  }
98
98
  },
99
99
  {
100
- name: "lighthouse.team.metrics.cycleTimePercentiles",
100
+ name: "lighthouse_team_metrics_cycleTimePercentiles",
101
101
  description: "Get cycle-time percentiles for a team by ID, optionally filtered by start and end dates.",
102
102
  inputSchema: {
103
103
  type: "object",
@@ -110,7 +110,7 @@ var toolDefinitions = [
110
110
  }
111
111
  },
112
112
  {
113
- name: "lighthouse.portfolio.metrics.throughput",
113
+ name: "lighthouse_portfolio_metrics_throughput",
114
114
  description: "Get throughput run-chart data for a portfolio by ID, optionally filtered by start and end dates.",
115
115
  inputSchema: {
116
116
  type: "object",
@@ -123,7 +123,7 @@ var toolDefinitions = [
123
123
  }
124
124
  },
125
125
  {
126
- name: "lighthouse.feature.get",
126
+ name: "lighthouse_feature_get",
127
127
  description: "Get feature details by numeric IDs or external reference IDs.",
128
128
  inputSchema: {
129
129
  type: "object",
@@ -147,17 +147,17 @@ var toolDefinitions = [
147
147
  }
148
148
  },
149
149
  {
150
- name: "lighthouse.feature.workitems",
150
+ name: "lighthouse_feature_workitems",
151
151
  description: "Get work items linked to a feature by ID.",
152
152
  inputSchema: idInputSchema
153
153
  },
154
154
  {
155
- name: "lighthouse.delivery.list",
155
+ name: "lighthouse_delivery_list",
156
156
  description: "List deliveries for a portfolio by portfolio ID.",
157
157
  inputSchema: idInputSchema
158
158
  },
159
159
  {
160
- name: "lighthouse.forecast.manual",
160
+ name: "lighthouse_forecast_manual",
161
161
  description: "Run a manual forecast for a team by ID with optional remaining items and target date.",
162
162
  inputSchema: {
163
163
  type: "object",
@@ -177,7 +177,7 @@ var toolDefinitions = [
177
177
  }
178
178
  },
179
179
  {
180
- name: "lighthouse.forecast.backtest",
180
+ name: "lighthouse_forecast_backtest",
181
181
  description: "Run a forecast backtest for a team by ID using forecast and historical date ranges.",
182
182
  inputSchema: {
183
183
  type: "object",
@@ -262,43 +262,43 @@ var getDateRange = (argumentsPayload) => {
262
262
  };
263
263
  var isoDateStringSchema = z.string().regex(/^\d{4}-\d{2}-\d{2}$/u, "Expected ISO date in YYYY-MM-DD format.");
264
264
  var toolInputSchemas = {
265
- "lighthouse.health.check": z.object({}),
266
- "lighthouse.version.get": z.object({}),
267
- "lighthouse.worktracking.list": z.object({}),
268
- "lighthouse.worktracking.get": z.object({ id: z.number().int() }),
269
- "lighthouse.team.list": z.object({}),
270
- "lighthouse.team.get": z.object({ id: z.number().int() }),
271
- "lighthouse.team.refresh": z.object({ id: z.number().int() }),
272
- "lighthouse.portfolio.list": z.object({}),
273
- "lighthouse.portfolio.get": z.object({ id: z.number().int() }),
274
- "lighthouse.portfolio.refresh": z.object({ id: z.number().int() }),
275
- "lighthouse.team.metrics.throughput": z.object({
265
+ lighthouse_health_check: z.object({}),
266
+ lighthouse_version_get: z.object({}),
267
+ lighthouse_worktracking_list: z.object({}),
268
+ lighthouse_worktracking_get: z.object({ id: z.number().int() }),
269
+ lighthouse_team_list: z.object({}),
270
+ lighthouse_team_get: z.object({ id: z.number().int() }),
271
+ lighthouse_team_refresh: z.object({ id: z.number().int() }),
272
+ lighthouse_portfolio_list: z.object({}),
273
+ lighthouse_portfolio_get: z.object({ id: z.number().int() }),
274
+ lighthouse_portfolio_refresh: z.object({ id: z.number().int() }),
275
+ lighthouse_team_metrics_throughput: z.object({
276
276
  id: z.number().int(),
277
277
  startDate: isoDateStringSchema.optional(),
278
278
  endDate: isoDateStringSchema.optional()
279
279
  }),
280
- "lighthouse.team.metrics.cycleTimePercentiles": z.object({
280
+ lighthouse_team_metrics_cycleTimePercentiles: z.object({
281
281
  id: z.number().int(),
282
282
  startDate: isoDateStringSchema.optional(),
283
283
  endDate: isoDateStringSchema.optional()
284
284
  }),
285
- "lighthouse.portfolio.metrics.throughput": z.object({
285
+ lighthouse_portfolio_metrics_throughput: z.object({
286
286
  id: z.number().int(),
287
287
  startDate: isoDateStringSchema.optional(),
288
288
  endDate: isoDateStringSchema.optional()
289
289
  }),
290
- "lighthouse.feature.get": z.object({
290
+ lighthouse_feature_get: z.object({
291
291
  ids: z.array(z.number().int()).optional(),
292
292
  refs: z.array(z.string()).optional()
293
293
  }),
294
- "lighthouse.feature.workitems": z.object({ id: z.number().int() }),
295
- "lighthouse.delivery.list": z.object({ id: z.number().int() }),
296
- "lighthouse.forecast.manual": z.object({
294
+ lighthouse_feature_workitems: z.object({ id: z.number().int() }),
295
+ lighthouse_delivery_list: z.object({ id: z.number().int() }),
296
+ lighthouse_forecast_manual: z.object({
297
297
  id: z.number().int(),
298
298
  remainingItems: z.number().int().optional(),
299
299
  targetDate: isoDateStringSchema.optional()
300
300
  }),
301
- "lighthouse.forecast.backtest": z.object({
301
+ lighthouse_forecast_backtest: z.object({
302
302
  id: z.number().int(),
303
303
  startDate: isoDateStringSchema,
304
304
  endDate: isoDateStringSchema,
@@ -306,12 +306,12 @@ var toolInputSchemas = {
306
306
  historicalEndDate: isoDateStringSchema
307
307
  })
308
308
  };
309
- var isReadOnlyTool = (toolName) => !toolName.endsWith(".refresh");
309
+ var isReadOnlyTool = (toolName) => !toolName.endsWith("_refresh");
310
310
  var createMcpCoreRuntime = (dependencies) => ({
311
311
  listTools: () => toolDefinitions,
312
312
  callTool: async (name, argumentsPayload) => {
313
313
  const client = dependencies.createClient();
314
- if (name === "lighthouse.health.check") {
314
+ if (name === "lighthouse_health_check") {
315
315
  const health = await client.checkConnectivity();
316
316
  if (health.category === "success") {
317
317
  return getSuccessToolResult("connectivity: success");
@@ -321,7 +321,7 @@ var createMcpCoreRuntime = (dependencies) => ({
321
321
  `connectivity: ${health.category}${healthReasonSuffix}`
322
322
  );
323
323
  }
324
- if (name === "lighthouse.version.get") {
324
+ if (name === "lighthouse_version_get") {
325
325
  const version = await client.getVersion();
326
326
  if (version.ok) {
327
327
  return getSuccessToolResult(`version: ${version.value}`);
@@ -330,7 +330,7 @@ var createMcpCoreRuntime = (dependencies) => ({
330
330
  `version: ${version.error.category} (${version.error.reason})`
331
331
  );
332
332
  }
333
- if (name === "lighthouse.worktracking.list") {
333
+ if (name === "lighthouse_worktracking_list") {
334
334
  const connections = await client.listWorkTrackingConnections();
335
335
  if (connections.ok) {
336
336
  return getSuccessToolResult(
@@ -341,7 +341,7 @@ var createMcpCoreRuntime = (dependencies) => ({
341
341
  `worktracking: ${connections.error.category} (${connections.error.reason})`
342
342
  );
343
343
  }
344
- if (name === "lighthouse.worktracking.get") {
344
+ if (name === "lighthouse_worktracking_get") {
345
345
  const id = getNumericId(argumentsPayload);
346
346
  if (id === null) {
347
347
  return getErrorToolResult("worktracking: invalid id");
@@ -356,7 +356,7 @@ var createMcpCoreRuntime = (dependencies) => ({
356
356
  `worktracking: ${connection.error.category} (${connection.error.reason})`
357
357
  );
358
358
  }
359
- if (name === "lighthouse.team.list") {
359
+ if (name === "lighthouse_team_list") {
360
360
  const teams = await client.listTeams();
361
361
  if (teams.ok) {
362
362
  return getSuccessToolResult(`teams: ${encodePayload(teams.value)}`);
@@ -365,7 +365,7 @@ var createMcpCoreRuntime = (dependencies) => ({
365
365
  `teams: ${teams.error.category} (${teams.error.reason})`
366
366
  );
367
367
  }
368
- if (name === "lighthouse.team.get") {
368
+ if (name === "lighthouse_team_get") {
369
369
  const id = getNumericId(argumentsPayload);
370
370
  if (id === null) {
371
371
  return getErrorToolResult("team: invalid id");
@@ -378,7 +378,7 @@ var createMcpCoreRuntime = (dependencies) => ({
378
378
  `team: ${team.error.category} (${team.error.reason})`
379
379
  );
380
380
  }
381
- if (name === "lighthouse.team.refresh") {
381
+ if (name === "lighthouse_team_refresh") {
382
382
  const id = getNumericId(argumentsPayload);
383
383
  if (id === null) {
384
384
  return getErrorToolResult("team: invalid id");
@@ -391,7 +391,7 @@ var createMcpCoreRuntime = (dependencies) => ({
391
391
  `team refresh: ${result.error.category} (${result.error.reason})`
392
392
  );
393
393
  }
394
- if (name === "lighthouse.portfolio.list") {
394
+ if (name === "lighthouse_portfolio_list") {
395
395
  const portfolios = await client.listPortfolios();
396
396
  if (portfolios.ok) {
397
397
  return getSuccessToolResult(
@@ -402,7 +402,7 @@ var createMcpCoreRuntime = (dependencies) => ({
402
402
  `portfolios: ${portfolios.error.category} (${portfolios.error.reason})`
403
403
  );
404
404
  }
405
- if (name === "lighthouse.portfolio.get") {
405
+ if (name === "lighthouse_portfolio_get") {
406
406
  const id = getNumericId(argumentsPayload);
407
407
  if (id === null) {
408
408
  return getErrorToolResult("portfolio: invalid id");
@@ -417,7 +417,7 @@ var createMcpCoreRuntime = (dependencies) => ({
417
417
  `portfolio: ${portfolio.error.category} (${portfolio.error.reason})`
418
418
  );
419
419
  }
420
- if (name === "lighthouse.portfolio.refresh") {
420
+ if (name === "lighthouse_portfolio_refresh") {
421
421
  const id = getNumericId(argumentsPayload);
422
422
  if (id === null) {
423
423
  return getErrorToolResult("portfolio: invalid id");
@@ -430,7 +430,7 @@ var createMcpCoreRuntime = (dependencies) => ({
430
430
  `portfolio refresh: ${result.error.category} (${result.error.reason})`
431
431
  );
432
432
  }
433
- if (name === "lighthouse.team.metrics.throughput") {
433
+ if (name === "lighthouse_team_metrics_throughput") {
434
434
  const id = getNumericId(argumentsPayload);
435
435
  if (id === null) {
436
436
  return getErrorToolResult("team metrics: invalid id");
@@ -446,7 +446,7 @@ var createMcpCoreRuntime = (dependencies) => ({
446
446
  `team metrics: ${result.error.category} (${result.error.reason})`
447
447
  );
448
448
  }
449
- if (name === "lighthouse.team.metrics.cycleTimePercentiles") {
449
+ if (name === "lighthouse_team_metrics_cycleTimePercentiles") {
450
450
  const id = getNumericId(argumentsPayload);
451
451
  if (id === null) {
452
452
  return getErrorToolResult("team metrics: invalid id");
@@ -462,7 +462,7 @@ var createMcpCoreRuntime = (dependencies) => ({
462
462
  `team metrics: ${result.error.category} (${result.error.reason})`
463
463
  );
464
464
  }
465
- if (name === "lighthouse.portfolio.metrics.throughput") {
465
+ if (name === "lighthouse_portfolio_metrics_throughput") {
466
466
  const id = getNumericId(argumentsPayload);
467
467
  if (id === null) {
468
468
  return getErrorToolResult("portfolio metrics: invalid id");
@@ -478,7 +478,7 @@ var createMcpCoreRuntime = (dependencies) => ({
478
478
  `portfolio metrics: ${result.error.category} (${result.error.reason})`
479
479
  );
480
480
  }
481
- if (name === "lighthouse.feature.get") {
481
+ if (name === "lighthouse_feature_get") {
482
482
  const payload = isObjectRecord(argumentsPayload) ? argumentsPayload : {};
483
483
  const idsValue = payload.ids;
484
484
  const refsValue = payload.refs;
@@ -512,7 +512,7 @@ var createMcpCoreRuntime = (dependencies) => ({
512
512
  "features: provide ids (array of numbers) or refs (array of strings)"
513
513
  );
514
514
  }
515
- if (name === "lighthouse.feature.workitems") {
515
+ if (name === "lighthouse_feature_workitems") {
516
516
  const id = getNumericId(argumentsPayload);
517
517
  if (id === null) {
518
518
  return getErrorToolResult("feature workitems: invalid id");
@@ -527,7 +527,7 @@ var createMcpCoreRuntime = (dependencies) => ({
527
527
  `feature workitems: ${result.error.category} (${result.error.reason})`
528
528
  );
529
529
  }
530
- if (name === "lighthouse.delivery.list") {
530
+ if (name === "lighthouse_delivery_list") {
531
531
  const id = getNumericId(argumentsPayload);
532
532
  if (id === null) {
533
533
  return getErrorToolResult(
@@ -544,7 +544,7 @@ var createMcpCoreRuntime = (dependencies) => ({
544
544
  `delivery: ${result.error.category} (${result.error.reason})`
545
545
  );
546
546
  }
547
- if (name === "lighthouse.forecast.manual") {
547
+ if (name === "lighthouse_forecast_manual") {
548
548
  const id = getNumericId(argumentsPayload);
549
549
  if (id === null) {
550
550
  return getErrorToolResult("forecast: invalid id (team id required)");
@@ -563,7 +563,7 @@ var createMcpCoreRuntime = (dependencies) => ({
563
563
  `forecast: ${result.error.category} (${result.error.reason})`
564
564
  );
565
565
  }
566
- if (name === "lighthouse.forecast.backtest") {
566
+ if (name === "lighthouse_forecast_backtest") {
567
567
  const id = getNumericId(argumentsPayload);
568
568
  if (id === null) {
569
569
  return getErrorToolResult("backtest: invalid id (team id required)");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letpeoplework/lighthouse-mcp-core",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "Shared MCP semantics for Lighthouse",
5
5
  "repository": "https://github.com/LetPeopleWork/lighthouse-clients",
6
6
  "type": "module",