@letpeoplework/lighthouse-mcp-core 1.8.1 → 1.9.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 +9 -7
- package/dist/index.js +10 -8
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -561,6 +561,7 @@ const recurringBlackoutRuleProperties = {
|
|
|
561
561
|
description: "Human-readable description of the rule."
|
|
562
562
|
}
|
|
563
563
|
};
|
|
564
|
+
const BEYOND_HORIZON_NOTE = "A forecast percentile with beyondHorizon true lies beyond Lighthouse's simulation horizon of horizonYears years: its expectedDate is only a stand-in, not a forecast, so say \"More than <horizonYears> years\" and never that date. Both fields are absent on an older Lighthouse, whose dates stand as sent.";
|
|
564
565
|
const toolDefinitions = [
|
|
565
566
|
{
|
|
566
567
|
name: "lighthouse_health_check",
|
|
@@ -690,7 +691,7 @@ const toolDefinitions = [
|
|
|
690
691
|
},
|
|
691
692
|
{
|
|
692
693
|
name: "lighthouse_portfolio_metrics_blockedCountHistory",
|
|
693
|
-
description: "Get the blocked-items-over-time trend for a portfolio by ID: how many work items were blocked on each captured day, optionally filtered by start and end dates. No tool reads what is blocked right now for a portfolio: name the command `lh metrics portfolio --metrics wip --id <id>`, whose items each carry isBlocked and, when blocked, a blockedSince timestamp. A second text block, `summary: …`, states the answer as the dashboard does, in the instance's terminology: the heading and its sentence; the first block is the facts, unchanged.",
|
|
694
|
+
description: "Get the blocked-items-over-time trend for a portfolio by ID: how many work items were blocked on each captured day, optionally filtered by start and end dates. No tool reads what is blocked right now for a portfolio: name the command `lh metrics portfolio --metrics wip --id <id>`, whose items each carry isBlocked and, when blocked, a blockedSince timestamp, and whether Lighthouse marks it stale (isStale) and why (staleReasons), both absent on an older Lighthouse. A second text block, `summary: …`, states the answer as the dashboard does, in the instance's terminology: the heading and its sentence; the first block is the facts, unchanged.",
|
|
694
695
|
inputSchema: {
|
|
695
696
|
type: "object",
|
|
696
697
|
properties: {
|
|
@@ -824,7 +825,7 @@ const toolDefinitions = [
|
|
|
824
825
|
},
|
|
825
826
|
{
|
|
826
827
|
name: "lighthouse_feature_get",
|
|
827
|
-
description: "Get feature details by numeric IDs or external reference IDs. A second text block, `summary`, counts them in the instance's terminology; the first block is the facts, unchanged.",
|
|
828
|
+
description: "Get feature details by numeric IDs or external reference IDs. A second text block, `summary`, counts them in the instance's terminology; the first block is the facts, unchanged. " + BEYOND_HORIZON_NOTE,
|
|
828
829
|
inputSchema: {
|
|
829
830
|
type: "object",
|
|
830
831
|
properties: {
|
|
@@ -849,12 +850,12 @@ const toolDefinitions = [
|
|
|
849
850
|
},
|
|
850
851
|
{
|
|
851
852
|
name: "lighthouse_delivery_list",
|
|
852
|
-
description: "List deliveries for a portfolio by portfolio ID. The answer holds the running deliveries under `active` and the archived ones under `archived`; a `summary` field counts the running ones in the instance's terminology.",
|
|
853
|
+
description: "List deliveries for a portfolio by portfolio ID. The answer holds the running deliveries under `active` and the archived ones under `archived`; a `summary` field counts the running ones in the instance's terminology. " + BEYOND_HORIZON_NOTE,
|
|
853
854
|
inputSchema: idInputSchema
|
|
854
855
|
},
|
|
855
856
|
{
|
|
856
857
|
name: "lighthouse_delivery_metrics",
|
|
857
|
-
description: "Get a delivery's recorded trend by delivery ID: one row per day with total, done and remaining work, the epic count and the likelihood. Set detail to \"epics\" for the per-epic breakdown and the forecast distribution, which are far larger. Forward-only, so it starts at the first recorded snapshot. `summary` states the delivery and its date as lh heads them, in the instance's terminology: a second text block beside the rows, a field of the detailed payload. Requires Lighthouse newer than v26.5.29.5.",
|
|
858
|
+
description: "Get a delivery's recorded trend by delivery ID: one row per day with total, done and remaining work, the epic count and the likelihood. Set detail to \"epics\" for the per-epic breakdown and the forecast distribution, which are far larger. Forward-only, so it starts at the first recorded snapshot. `summary` states the delivery and its date as lh heads them, in the instance's terminology: a second text block beside the rows, a field of the detailed payload. Requires Lighthouse newer than v26.5.29.5. " + BEYOND_HORIZON_NOTE,
|
|
858
859
|
inputSchema: {
|
|
859
860
|
type: "object",
|
|
860
861
|
properties: {
|
|
@@ -918,7 +919,7 @@ const toolDefinitions = [
|
|
|
918
919
|
},
|
|
919
920
|
{
|
|
920
921
|
name: "lighthouse_forecast_manual",
|
|
921
|
-
description: "Run a manual forecast for a team by ID with optional remaining items and target date. Pass applyFilterOverride=true to apply the team's forecast filter, false to skip it, or omit to respect the team setting (Lighthouse v26.5.24.10+). The response includes filterApplied (boolean) and excludedSummary (string) when a filter was applied. `summary` states the answer as the web does, in the instance's terminology: the heading, then the likelihood sentence when both remaining items and a target date were given.",
|
|
922
|
+
description: "Run a manual forecast for a team by ID with optional remaining items and target date. Pass applyFilterOverride=true to apply the team's forecast filter, false to skip it, or omit to respect the team setting (Lighthouse v26.5.24.10+). The response includes filterApplied (boolean) and excludedSummary (string) when a filter was applied. `summary` states the answer as the web does, in the instance's terminology: the heading, then the likelihood sentence when both remaining items and a target date were given. " + BEYOND_HORIZON_NOTE,
|
|
922
923
|
inputSchema: {
|
|
923
924
|
type: "object",
|
|
924
925
|
properties: {
|
|
@@ -1058,7 +1059,7 @@ const toolDefinitions = [
|
|
|
1058
1059
|
},
|
|
1059
1060
|
{
|
|
1060
1061
|
name: "lighthouse_team_metrics_wip",
|
|
1061
|
-
description: "Get what a team has in progress right now by ID: each work item in progress today with its age (workItemAge), state, whether it is blocked (isBlocked) and since when (blockedSince), and its link (url). Use it for what is blocked or aging today; for how many were blocked on past days use lighthouse_team_metrics_blockedCountHistory. A second text block, `summary: …`, states the answer as lh does, in the instance's terminology: the heading, how many are in progress against the System WIP Limit, and how many are
|
|
1062
|
+
description: "Get what a team has in progress right now by ID: each work item in progress today with its age (workItemAge), state, whether it is blocked (isBlocked) and since when (blockedSince), whether Lighthouse marks it stale (isStale) and why (staleReasons: each a kind, TimeInState, BlockedDuration or TimeInStateWhileBlocked, with its days, and the state's stateName on the two time-in-state kinds), and its link (url). isStale and staleReasons are absent on an older Lighthouse, which does not say which work items are stale; never work staleness out yourself. Use it for what is blocked, stale or aging today; for how many were blocked on past days use lighthouse_team_metrics_blockedCountHistory. A second text block, `summary: …`, states the answer as lh does, in the instance's terminology: the heading, how many are in progress against the System WIP Limit, how many are blocked and how many are stale; the first block is the facts, unchanged.",
|
|
1062
1063
|
inputSchema: idInputSchema
|
|
1063
1064
|
},
|
|
1064
1065
|
{
|
|
@@ -1197,7 +1198,8 @@ const summariseCurrentWip = (today) => (facts, known) => {
|
|
|
1197
1198
|
if (now === null) return null;
|
|
1198
1199
|
const { terms } = known.wording;
|
|
1199
1200
|
const blocked = (0, _letpeoplework_lighthouse_client.describeBlockedNow)(now, "team", terms);
|
|
1200
|
-
|
|
1201
|
+
const stale = (0, _letpeoplework_lighthouse_client.describeStaleNow)(now, "team", terms);
|
|
1202
|
+
return linesOf((0, _letpeoplework_lighthouse_client.describeAsOfHeading)({ endDate: today }, known.wording), sentenceOf((0, _letpeoplework_lighthouse_client.describeInProgressNow)(now, "team", terms, known.systemWipLimit ?? void 0)), blocked === null ? null : sentenceOf(blocked), stale === null ? null : sentenceOf(stale), ...(0, _letpeoplework_lighthouse_client.describeWhatWipLeavesUnsaid)(now, "team", terms, known.systemWipLimit));
|
|
1201
1203
|
};
|
|
1202
1204
|
const readTeamForSummary = async (client, teamId) => {
|
|
1203
1205
|
const team = client.getTeam(teamId);
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LIGHTHOUSE_IS_REACHABLE, REFINEMENT_ANSWERS, describeAsOfHeading, describeBacktestActual, describeBacktestPeriod, describeBacktestSummary, describeBlackoutRuleCount, describeBlackoutRuleWriteConfirmation, describeBlockedDays, describeBlockedNow, describeConnectionSummary, describeCycleTimeDays, describeDeliveryCount, describeDeliveryMetricsHeading, describeFeatureListCount, describeFeatureWorkItemsHeading, describeInProgressNow, describeManualForecastLikelihood, describeManualForecastSummary, describeMetricSummary, describeMetricsHeading, describeMissingCondition, describeNothingToTakeBack, describeOwnerCount, describePercentilesOverTimeDays, describePortfolioSummary, describeProcessBehaviorChart, describeProcessBehaviorOverTimeDays, describeRecordedComment, describeRecordedVote, describeRefinementSummary, describeRefreshConfirmation, describeSleRiskNow, describeTakenBack, describeTeamSummary, describeThroughputDays, describeTimeInStateContributorDays, describeTimeInStateDays, describeTotalWorkItemAgeDays, describeVersion, describeWhatWipLeavesUnsaid, describeWorkItemAgeDays, describeWorkItemAgePercentiles, describeWorkTrackingSystemCount, getDefaultMetricsDateRange, isMissingItsCondition, isRefinementAnswer, keepVoterKey, myVoteOn, readAnswerWording, readBacktest, readBlackoutRules, readBlocked, readCycleTimeDefinitionName, readCycleTimePercentiles, readDeliveryMetricsHistory, readFeatureList, readFeatureWording, readFeatureWorkItems, readInProgressItems, readManualForecast, readNameOfMyVote, readOwnerList, readPercentilesOverTime, readPortfolio, readPortfolioDeliveries, readProcessBehaviorChart, readProcessBehaviorOverTime, readRefinementWording, readRunChart, readServiceLevelExpectation, readSleRisk, readSystemWipLimit, readTeam, readTerms, readTimeInStateBar, readTimeInStateContributors, readTotalWorkItemAge, readVoteRefusal, readWorkItemAge, readWorkItemAgePercentiles, readWorkTrackingConnections, readWrittenBlackoutRule, refinementDayVerdictOf, sizingMomentOf, summariseDeliveryMetricsHistory } from "@letpeoplework/lighthouse-client";
|
|
1
|
+
import { LIGHTHOUSE_IS_REACHABLE, REFINEMENT_ANSWERS, describeAsOfHeading, describeBacktestActual, describeBacktestPeriod, describeBacktestSummary, describeBlackoutRuleCount, describeBlackoutRuleWriteConfirmation, describeBlockedDays, describeBlockedNow, describeConnectionSummary, describeCycleTimeDays, describeDeliveryCount, describeDeliveryMetricsHeading, describeFeatureListCount, describeFeatureWorkItemsHeading, describeInProgressNow, describeManualForecastLikelihood, describeManualForecastSummary, describeMetricSummary, describeMetricsHeading, describeMissingCondition, describeNothingToTakeBack, describeOwnerCount, describePercentilesOverTimeDays, describePortfolioSummary, describeProcessBehaviorChart, describeProcessBehaviorOverTimeDays, describeRecordedComment, describeRecordedVote, describeRefinementSummary, describeRefreshConfirmation, describeSleRiskNow, describeStaleNow, describeTakenBack, describeTeamSummary, describeThroughputDays, describeTimeInStateContributorDays, describeTimeInStateDays, describeTotalWorkItemAgeDays, describeVersion, describeWhatWipLeavesUnsaid, describeWorkItemAgeDays, describeWorkItemAgePercentiles, describeWorkTrackingSystemCount, getDefaultMetricsDateRange, isMissingItsCondition, isRefinementAnswer, keepVoterKey, myVoteOn, readAnswerWording, readBacktest, readBlackoutRules, readBlocked, readCycleTimeDefinitionName, readCycleTimePercentiles, readDeliveryMetricsHistory, readFeatureList, readFeatureWording, readFeatureWorkItems, readInProgressItems, readManualForecast, readNameOfMyVote, readOwnerList, readPercentilesOverTime, readPortfolio, readPortfolioDeliveries, readProcessBehaviorChart, readProcessBehaviorOverTime, readRefinementWording, readRunChart, readServiceLevelExpectation, readSleRisk, readSystemWipLimit, readTeam, readTerms, readTimeInStateBar, readTimeInStateContributors, readTotalWorkItemAge, readVoteRefusal, readWorkItemAge, readWorkItemAgePercentiles, readWorkTrackingConnections, readWrittenBlackoutRule, refinementDayVerdictOf, sizingMomentOf, summariseDeliveryMetricsHistory } from "@letpeoplework/lighthouse-client";
|
|
2
2
|
import { ElicitResultSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { encode } from "@toon-format/toon";
|
|
@@ -560,6 +560,7 @@ const recurringBlackoutRuleProperties = {
|
|
|
560
560
|
description: "Human-readable description of the rule."
|
|
561
561
|
}
|
|
562
562
|
};
|
|
563
|
+
const BEYOND_HORIZON_NOTE = "A forecast percentile with beyondHorizon true lies beyond Lighthouse's simulation horizon of horizonYears years: its expectedDate is only a stand-in, not a forecast, so say \"More than <horizonYears> years\" and never that date. Both fields are absent on an older Lighthouse, whose dates stand as sent.";
|
|
563
564
|
const toolDefinitions = [
|
|
564
565
|
{
|
|
565
566
|
name: "lighthouse_health_check",
|
|
@@ -689,7 +690,7 @@ const toolDefinitions = [
|
|
|
689
690
|
},
|
|
690
691
|
{
|
|
691
692
|
name: "lighthouse_portfolio_metrics_blockedCountHistory",
|
|
692
|
-
description: "Get the blocked-items-over-time trend for a portfolio by ID: how many work items were blocked on each captured day, optionally filtered by start and end dates. No tool reads what is blocked right now for a portfolio: name the command `lh metrics portfolio --metrics wip --id <id>`, whose items each carry isBlocked and, when blocked, a blockedSince timestamp. A second text block, `summary: …`, states the answer as the dashboard does, in the instance's terminology: the heading and its sentence; the first block is the facts, unchanged.",
|
|
693
|
+
description: "Get the blocked-items-over-time trend for a portfolio by ID: how many work items were blocked on each captured day, optionally filtered by start and end dates. No tool reads what is blocked right now for a portfolio: name the command `lh metrics portfolio --metrics wip --id <id>`, whose items each carry isBlocked and, when blocked, a blockedSince timestamp, and whether Lighthouse marks it stale (isStale) and why (staleReasons), both absent on an older Lighthouse. A second text block, `summary: …`, states the answer as the dashboard does, in the instance's terminology: the heading and its sentence; the first block is the facts, unchanged.",
|
|
693
694
|
inputSchema: {
|
|
694
695
|
type: "object",
|
|
695
696
|
properties: {
|
|
@@ -823,7 +824,7 @@ const toolDefinitions = [
|
|
|
823
824
|
},
|
|
824
825
|
{
|
|
825
826
|
name: "lighthouse_feature_get",
|
|
826
|
-
description: "Get feature details by numeric IDs or external reference IDs. A second text block, `summary`, counts them in the instance's terminology; the first block is the facts, unchanged.",
|
|
827
|
+
description: "Get feature details by numeric IDs or external reference IDs. A second text block, `summary`, counts them in the instance's terminology; the first block is the facts, unchanged. " + BEYOND_HORIZON_NOTE,
|
|
827
828
|
inputSchema: {
|
|
828
829
|
type: "object",
|
|
829
830
|
properties: {
|
|
@@ -848,12 +849,12 @@ const toolDefinitions = [
|
|
|
848
849
|
},
|
|
849
850
|
{
|
|
850
851
|
name: "lighthouse_delivery_list",
|
|
851
|
-
description: "List deliveries for a portfolio by portfolio ID. The answer holds the running deliveries under `active` and the archived ones under `archived`; a `summary` field counts the running ones in the instance's terminology.",
|
|
852
|
+
description: "List deliveries for a portfolio by portfolio ID. The answer holds the running deliveries under `active` and the archived ones under `archived`; a `summary` field counts the running ones in the instance's terminology. " + BEYOND_HORIZON_NOTE,
|
|
852
853
|
inputSchema: idInputSchema
|
|
853
854
|
},
|
|
854
855
|
{
|
|
855
856
|
name: "lighthouse_delivery_metrics",
|
|
856
|
-
description: "Get a delivery's recorded trend by delivery ID: one row per day with total, done and remaining work, the epic count and the likelihood. Set detail to \"epics\" for the per-epic breakdown and the forecast distribution, which are far larger. Forward-only, so it starts at the first recorded snapshot. `summary` states the delivery and its date as lh heads them, in the instance's terminology: a second text block beside the rows, a field of the detailed payload. Requires Lighthouse newer than v26.5.29.5.",
|
|
857
|
+
description: "Get a delivery's recorded trend by delivery ID: one row per day with total, done and remaining work, the epic count and the likelihood. Set detail to \"epics\" for the per-epic breakdown and the forecast distribution, which are far larger. Forward-only, so it starts at the first recorded snapshot. `summary` states the delivery and its date as lh heads them, in the instance's terminology: a second text block beside the rows, a field of the detailed payload. Requires Lighthouse newer than v26.5.29.5. " + BEYOND_HORIZON_NOTE,
|
|
857
858
|
inputSchema: {
|
|
858
859
|
type: "object",
|
|
859
860
|
properties: {
|
|
@@ -917,7 +918,7 @@ const toolDefinitions = [
|
|
|
917
918
|
},
|
|
918
919
|
{
|
|
919
920
|
name: "lighthouse_forecast_manual",
|
|
920
|
-
description: "Run a manual forecast for a team by ID with optional remaining items and target date. Pass applyFilterOverride=true to apply the team's forecast filter, false to skip it, or omit to respect the team setting (Lighthouse v26.5.24.10+). The response includes filterApplied (boolean) and excludedSummary (string) when a filter was applied. `summary` states the answer as the web does, in the instance's terminology: the heading, then the likelihood sentence when both remaining items and a target date were given.",
|
|
921
|
+
description: "Run a manual forecast for a team by ID with optional remaining items and target date. Pass applyFilterOverride=true to apply the team's forecast filter, false to skip it, or omit to respect the team setting (Lighthouse v26.5.24.10+). The response includes filterApplied (boolean) and excludedSummary (string) when a filter was applied. `summary` states the answer as the web does, in the instance's terminology: the heading, then the likelihood sentence when both remaining items and a target date were given. " + BEYOND_HORIZON_NOTE,
|
|
921
922
|
inputSchema: {
|
|
922
923
|
type: "object",
|
|
923
924
|
properties: {
|
|
@@ -1057,7 +1058,7 @@ const toolDefinitions = [
|
|
|
1057
1058
|
},
|
|
1058
1059
|
{
|
|
1059
1060
|
name: "lighthouse_team_metrics_wip",
|
|
1060
|
-
description: "Get what a team has in progress right now by ID: each work item in progress today with its age (workItemAge), state, whether it is blocked (isBlocked) and since when (blockedSince), and its link (url). Use it for what is blocked or aging today; for how many were blocked on past days use lighthouse_team_metrics_blockedCountHistory. A second text block, `summary: …`, states the answer as lh does, in the instance's terminology: the heading, how many are in progress against the System WIP Limit, and how many are
|
|
1061
|
+
description: "Get what a team has in progress right now by ID: each work item in progress today with its age (workItemAge), state, whether it is blocked (isBlocked) and since when (blockedSince), whether Lighthouse marks it stale (isStale) and why (staleReasons: each a kind, TimeInState, BlockedDuration or TimeInStateWhileBlocked, with its days, and the state's stateName on the two time-in-state kinds), and its link (url). isStale and staleReasons are absent on an older Lighthouse, which does not say which work items are stale; never work staleness out yourself. Use it for what is blocked, stale or aging today; for how many were blocked on past days use lighthouse_team_metrics_blockedCountHistory. A second text block, `summary: …`, states the answer as lh does, in the instance's terminology: the heading, how many are in progress against the System WIP Limit, how many are blocked and how many are stale; the first block is the facts, unchanged.",
|
|
1061
1062
|
inputSchema: idInputSchema
|
|
1062
1063
|
},
|
|
1063
1064
|
{
|
|
@@ -1196,7 +1197,8 @@ const summariseCurrentWip = (today) => (facts, known) => {
|
|
|
1196
1197
|
if (now === null) return null;
|
|
1197
1198
|
const { terms } = known.wording;
|
|
1198
1199
|
const blocked = describeBlockedNow(now, "team", terms);
|
|
1199
|
-
|
|
1200
|
+
const stale = describeStaleNow(now, "team", terms);
|
|
1201
|
+
return linesOf(describeAsOfHeading({ endDate: today }, known.wording), sentenceOf(describeInProgressNow(now, "team", terms, known.systemWipLimit ?? void 0)), blocked === null ? null : sentenceOf(blocked), stale === null ? null : sentenceOf(stale), ...describeWhatWipLeavesUnsaid(now, "team", terms, known.systemWipLimit));
|
|
1200
1202
|
};
|
|
1201
1203
|
const readTeamForSummary = async (client, teamId) => {
|
|
1202
1204
|
const team = client.getTeam(teamId);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@letpeoplework/lighthouse-mcp-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "Shared MCP semantics for Lighthouse",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"registry": "https://registry.npmjs.org/"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@letpeoplework/lighthouse-client": "1.
|
|
29
|
+
"@letpeoplework/lighthouse-client": "1.11.0",
|
|
30
30
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
31
31
|
"@toon-format/toon": "^4.0.0",
|
|
32
32
|
"zod": "^4.0.0"
|