@nestpilot/mcp-app 1.0.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.
Files changed (149) hide show
  1. package/README.md +350 -0
  2. package/dist/cli/doctor.d.ts +1 -0
  3. package/dist/cli/doctor.js +214 -0
  4. package/dist/cli/export-import.d.ts +6 -0
  5. package/dist/cli/export-import.js +132 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.js +168 -0
  8. package/dist/cli/init.d.ts +1 -0
  9. package/dist/cli/init.js +171 -0
  10. package/dist/host-configs/cowork.json +11 -0
  11. package/dist/host-configs/goose.yaml +22 -0
  12. package/dist/host-configs/openclaw-manifest.json +16 -0
  13. package/dist/main.d.ts +2 -0
  14. package/dist/main.js +128 -0
  15. package/dist/mcp-app.html +155 -0
  16. package/dist/nestpilot-client.d.ts +44 -0
  17. package/dist/nestpilot-client.js +160 -0
  18. package/dist/planner.html +222 -0
  19. package/dist/server.d.ts +19 -0
  20. package/dist/server.js +245 -0
  21. package/dist/skills/SKILL.md +162 -0
  22. package/dist/skills/manifest.json +51 -0
  23. package/dist/skills/tools/activate_plan.md +36 -0
  24. package/dist/skills/tools/coach.md +59 -0
  25. package/dist/skills/tools/comprehensive_plan.md +65 -0
  26. package/dist/skills/tools/create_plan.md +59 -0
  27. package/dist/skills/tools/create_saved_plan.md +49 -0
  28. package/dist/skills/tools/delete_plan.md +42 -0
  29. package/dist/skills/tools/delete_scenario.md +38 -0
  30. package/dist/skills/tools/generate_proposal.md +63 -0
  31. package/dist/skills/tools/generate_retirement_report.md +50 -0
  32. package/dist/skills/tools/get_active_plan.md +44 -0
  33. package/dist/skills/tools/get_baseline_forecast.md +47 -0
  34. package/dist/skills/tools/get_plan.md +44 -0
  35. package/dist/skills/tools/get_plan_components.md +50 -0
  36. package/dist/skills/tools/get_scenario.md +46 -0
  37. package/dist/skills/tools/list_plans.md +44 -0
  38. package/dist/skills/tools/list_scenarios.md +42 -0
  39. package/dist/skills/tools/medicare-guardian.md +59 -0
  40. package/dist/skills/tools/nestpilot_run_plan.md +61 -0
  41. package/dist/skills/tools/optimize_roth_conversion.md +107 -0
  42. package/dist/skills/tools/optimize_ss_claiming.md +30 -0
  43. package/dist/skills/tools/rename_plan.md +34 -0
  44. package/dist/skills/tools/retirement-planner.md +55 -0
  45. package/dist/skills/tools/run_forecast.md +65 -0
  46. package/dist/skills/tools/run_saved_forecast.md +52 -0
  47. package/dist/skills/tools/run_scenario.md +66 -0
  48. package/dist/skills/tools/save_plan.md +48 -0
  49. package/dist/skills/tools/save_scenario.md +50 -0
  50. package/dist/skills/tools/verify_forecast.md +43 -0
  51. package/dist/src/config.d.ts +20 -0
  52. package/dist/src/config.js +44 -0
  53. package/dist/src/contracts/provenance.d.ts +37 -0
  54. package/dist/src/contracts/provenance.js +71 -0
  55. package/dist/src/contracts/tool-contract-registry.d.ts +43 -0
  56. package/dist/src/contracts/tool-contract-registry.js +282 -0
  57. package/dist/src/local/cloud-compute-client.d.ts +55 -0
  58. package/dist/src/local/cloud-compute-client.js +135 -0
  59. package/dist/src/local/encryption.d.ts +24 -0
  60. package/dist/src/local/encryption.js +105 -0
  61. package/dist/src/local/keychain.d.ts +41 -0
  62. package/dist/src/local/keychain.js +236 -0
  63. package/dist/src/local/local-config.d.ts +34 -0
  64. package/dist/src/local/local-config.js +61 -0
  65. package/dist/src/local/local-data-layer.d.ts +20 -0
  66. package/dist/src/local/local-data-layer.js +15 -0
  67. package/dist/src/local/local-plan-store.d.ts +66 -0
  68. package/dist/src/local/local-plan-store.js +195 -0
  69. package/dist/src/local/pii-scrubber.d.ts +26 -0
  70. package/dist/src/local/pii-scrubber.js +219 -0
  71. package/dist/src/policy/policy-engine.d.ts +44 -0
  72. package/dist/src/policy/policy-engine.js +119 -0
  73. package/dist/src/rate-limit.d.ts +17 -0
  74. package/dist/src/rate-limit.js +41 -0
  75. package/dist/src/security.d.ts +19 -0
  76. package/dist/src/security.js +118 -0
  77. package/dist/src/skills/index.d.ts +12 -0
  78. package/dist/src/skills/index.js +16 -0
  79. package/dist/src/skills/retirement-pack-v1.d.ts +28 -0
  80. package/dist/src/skills/retirement-pack-v1.js +295 -0
  81. package/dist/src/skills/skill-executor.d.ts +65 -0
  82. package/dist/src/skills/skill-executor.js +174 -0
  83. package/dist/src/skills/skill-manifest-schema.d.ts +337 -0
  84. package/dist/src/skills/skill-manifest-schema.js +94 -0
  85. package/dist/src/skills/skill-registry.d.ts +71 -0
  86. package/dist/src/skills/skill-registry.js +116 -0
  87. package/dist/src/telemetry.d.ts +12 -0
  88. package/dist/src/telemetry.js +59 -0
  89. package/dist/src/types.d.ts +46 -0
  90. package/dist/src/types.js +4 -0
  91. package/dist/tools/agent-tools.d.ts +12 -0
  92. package/dist/tools/agent-tools.js +141 -0
  93. package/dist/tools/forecast-management-tools.d.ts +9 -0
  94. package/dist/tools/forecast-management-tools.js +133 -0
  95. package/dist/tools/local-plan-tools.d.ts +8 -0
  96. package/dist/tools/local-plan-tools.js +357 -0
  97. package/dist/tools/mcp-helpers.d.ts +52 -0
  98. package/dist/tools/mcp-helpers.js +177 -0
  99. package/dist/tools/medicare-tools.d.ts +3 -0
  100. package/dist/tools/medicare-tools.js +162 -0
  101. package/dist/tools/optimize-roth-tools-test.d.ts +2 -0
  102. package/dist/tools/optimize-roth-tools-test.js +36 -0
  103. package/dist/tools/optimize-roth-tools.d.ts +3 -0
  104. package/dist/tools/optimize-roth-tools.js +818 -0
  105. package/dist/tools/plan-management-tools.d.ts +3 -0
  106. package/dist/tools/plan-management-tools.js +196 -0
  107. package/dist/tools/planning-tools.d.ts +3 -0
  108. package/dist/tools/planning-tools.js +290 -0
  109. package/dist/tools/proposal-tools.d.ts +3 -0
  110. package/dist/tools/proposal-tools.js +428 -0
  111. package/dist/tools/report-tools.d.ts +3 -0
  112. package/dist/tools/report-tools.js +245 -0
  113. package/dist/tools/scenario-management-tools.d.ts +3 -0
  114. package/dist/tools/scenario-management-tools.js +136 -0
  115. package/dist/views/verification-packet.html +211 -0
  116. package/host-configs/cowork.json +11 -0
  117. package/host-configs/goose.yaml +22 -0
  118. package/host-configs/openclaw-manifest.json +16 -0
  119. package/package.json +66 -0
  120. package/skills/SKILL.md +162 -0
  121. package/skills/manifest.json +51 -0
  122. package/skills/tools/activate_plan.md +36 -0
  123. package/skills/tools/coach.md +59 -0
  124. package/skills/tools/comprehensive_plan.md +65 -0
  125. package/skills/tools/create_plan.md +59 -0
  126. package/skills/tools/create_saved_plan.md +49 -0
  127. package/skills/tools/delete_plan.md +42 -0
  128. package/skills/tools/delete_scenario.md +38 -0
  129. package/skills/tools/generate_proposal.md +63 -0
  130. package/skills/tools/generate_retirement_report.md +50 -0
  131. package/skills/tools/get_active_plan.md +44 -0
  132. package/skills/tools/get_baseline_forecast.md +47 -0
  133. package/skills/tools/get_plan.md +44 -0
  134. package/skills/tools/get_plan_components.md +50 -0
  135. package/skills/tools/get_scenario.md +46 -0
  136. package/skills/tools/list_plans.md +44 -0
  137. package/skills/tools/list_scenarios.md +42 -0
  138. package/skills/tools/medicare-guardian.md +59 -0
  139. package/skills/tools/nestpilot_run_plan.md +61 -0
  140. package/skills/tools/optimize_roth_conversion.md +107 -0
  141. package/skills/tools/optimize_ss_claiming.md +30 -0
  142. package/skills/tools/rename_plan.md +34 -0
  143. package/skills/tools/retirement-planner.md +55 -0
  144. package/skills/tools/run_forecast.md +65 -0
  145. package/skills/tools/run_saved_forecast.md +52 -0
  146. package/skills/tools/run_scenario.md +66 -0
  147. package/skills/tools/save_plan.md +48 -0
  148. package/skills/tools/save_scenario.md +50 -0
  149. package/skills/tools/verify_forecast.md +43 -0
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Scenario management MCP tools.
3
+ *
4
+ * Provides CRUD wrappers for saved what-if scenarios.
5
+ */
6
+ import { registerAppTool } from "@modelcontextprotocol/ext-apps/server";
7
+ import { z } from "zod";
8
+ import { proxyDeleteTool, proxyGetTool, proxyPostTool, } from "./mcp-helpers.js";
9
+ export function registerScenarioManagementTools(server, authCtx) {
10
+ registerAppTool(server, "save_scenario", {
11
+ title: "Save Scenario",
12
+ description: `Persists a what-if scenario for a user and optionally a plan.
13
+
14
+ USE THIS TOOL WHEN THE USER:
15
+ - Wants to save a scenario they just ran
16
+ - Needs to keep scenario deltas/overrides for future comparison`,
17
+ inputSchema: {
18
+ label: z.string().describe("Human-readable scenario name"),
19
+ deltas: z
20
+ .array(z.record(z.any()))
21
+ .optional()
22
+ .describe("Legacy delta list for backward compatibility"),
23
+ overrides: z
24
+ .record(z.any())
25
+ .optional()
26
+ .describe("Scenario override bundle (planDeltas, componentOverrides, componentAdditions)"),
27
+ bundle: z
28
+ .record(z.any())
29
+ .optional()
30
+ .describe("Optional computed bundle snapshot"),
31
+ forecastId: z
32
+ .string()
33
+ .optional()
34
+ .describe("Optional linked forecast ID"),
35
+ planId: z.string().optional().describe("Optional saved plan UUID"),
36
+ componentAdditions: z
37
+ .array(z.object({
38
+ componentId: z.string().describe("Product component ID, e.g. 'highpoint365.v1'"),
39
+ version: z.string().optional().describe("Component version"),
40
+ name: z.string().describe("Display name"),
41
+ params: z.record(z.any()).describe("Configuration parameters"),
42
+ enabled: z.boolean().optional().default(true),
43
+ }))
44
+ .optional()
45
+ .describe("FEAT-0079: New financial components to add in this scenario (e.g. annuities, insurance). Merged into overrides.componentAdditions."),
46
+ },
47
+ _meta: { ui: { visibility: ["model", "app"] } },
48
+ }, async (args) => {
49
+ const payload = { ...args };
50
+ // FEAT-0079: Merge top-level componentAdditions into overrides bundle
51
+ if (payload.componentAdditions && Array.isArray(payload.componentAdditions)) {
52
+ const overrides = payload.overrides ?? {};
53
+ overrides.componentAdditions = payload.componentAdditions;
54
+ payload.overrides = overrides;
55
+ delete payload.componentAdditions;
56
+ }
57
+ return proxyPostTool("/api/scenarios/save", payload, {
58
+ toolName: "save_scenario",
59
+ authCtx,
60
+ });
61
+ });
62
+ registerAppTool(server, "list_scenarios", {
63
+ title: "List Scenarios",
64
+ description: `Lists saved scenarios. If planId is provided, scopes to that plan.
65
+
66
+ USE THIS TOOL WHEN THE USER:
67
+ - Asks what scenarios they have saved
68
+ - Needs a scenario ID before loading or deleting one`,
69
+ inputSchema: {
70
+ planId: z
71
+ .string()
72
+ .optional()
73
+ .describe("Optional plan UUID to filter scenarios"),
74
+ },
75
+ _meta: { ui: { visibility: ["model", "app"] } },
76
+ }, async (args) => {
77
+ const { planId } = (args ?? {});
78
+ const params = planId ? { planId } : undefined;
79
+ return proxyGetTool("/api/scenarios", params, {
80
+ toolName: "list_scenarios",
81
+ authCtx,
82
+ });
83
+ });
84
+ registerAppTool(server, "get_scenario", {
85
+ title: "Get Scenario",
86
+ description: `Retrieves one saved scenario by ID.`,
87
+ inputSchema: {
88
+ scenarioId: z.string().describe("UUID of the saved scenario"),
89
+ },
90
+ _meta: { ui: { visibility: ["model", "app"] } },
91
+ }, async (args) => {
92
+ const { scenarioId } = args;
93
+ return proxyGetTool(`/api/scenarios/${encodeURIComponent(scenarioId)}`, undefined, {
94
+ toolName: "get_scenario",
95
+ authCtx,
96
+ });
97
+ });
98
+ registerAppTool(server, "delete_scenario", {
99
+ title: "Delete Scenario",
100
+ description: `Deletes a saved scenario by ID.`,
101
+ inputSchema: {
102
+ scenarioId: z.string().describe("UUID of the saved scenario"),
103
+ },
104
+ _meta: { ui: { visibility: ["model", "app"] } },
105
+ }, async (args) => {
106
+ const { scenarioId } = args;
107
+ return proxyDeleteTool(`/api/scenarios/${encodeURIComponent(scenarioId)}`, {
108
+ toolName: "delete_scenario",
109
+ authCtx,
110
+ });
111
+ });
112
+ /** @feature FEAT-0079 */
113
+ registerAppTool(server, "promote_scenario", {
114
+ title: "Promote Scenario to Baseline",
115
+ description: `Promotes a scenario to become the client's new baseline plan.
116
+
117
+ Applies all scenario overrides (plan deltas, component changes, component additions) permanently to the plan. A backup scenario is auto-created before promotion for rollback safety.
118
+
119
+ USE THIS TOOL WHEN:
120
+ - The client has unlocked a proposal and wants to adopt the advisor's recommended changes
121
+ - The advisor or client wants to make a scenario the new baseline
122
+ - The user says "adopt this plan", "promote scenario", or "apply these changes"
123
+
124
+ SAFETY: A backup of the current baseline is created automatically. The promoted scenario is soft-deleted after promotion.
125
+
126
+ GATED: Plan owner only.`,
127
+ inputSchema: {
128
+ planId: z.string().uuid().describe("UUID of the plan"),
129
+ scenarioId: z.string().uuid().describe("UUID of the scenario to promote"),
130
+ },
131
+ _meta: { ui: { visibility: ["model", "app"] } },
132
+ }, async (args) => {
133
+ const { planId, scenarioId } = args;
134
+ return proxyPostTool(`/api/plans/${encodeURIComponent(planId)}/scenarios/${encodeURIComponent(scenarioId)}/promote`, {}, { toolName: "promote_scenario", authCtx });
135
+ });
136
+ }