@loopops/mcp-server 2.4.1 → 2.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.
@@ -152,7 +152,7 @@ export function registerConfigTools(server, allowed) {
152
152
  }, safeTool(async ({ scenarioId, dryRun, branch }) => trpcMutation("mcp.promoteScenario", { scenarioId, dryRun, branch })));
153
153
  }
154
154
  if (allowed.has("gap_analysis")) {
155
- server.tool("gap_analysis", "Use a Claude agent to find the smallest change set that closes a scenario's capacity gap on the target measure. The agent iterates simulate_capacity calls (mutating roster + target_productivity in memory, calling the existing /capacity endpoint) up to a budget cap, then submits a structured proposal. Writes the converged proposal as a draft scenario at `config/plan/scenarios/proposed-gap-{measure}-{ts}.yaml` (override with `writeFile: false`). Use `compare_scenarios` to verify the proposal, then `promote_scenario` to make it active.", {
155
+ server.tool("gap_analysis", "Use a Claude agent to find the smallest change set that closes a scenario's capacity gap on the target measure. The agent iterates simulate_capacity calls (mutating roster + target_productivity in memory, calling the existing /capacity endpoint) up to a budget cap, then submits a structured proposal. Output is exploratory by default — pass `writeFile: true` to materialize the proposal as a draft scenario at `config/plan/scenarios/proposed-gap-{measure}-{ts}.yaml`, then use `compare_scenarios` to verify and `promote_scenario` to make it active.", {
156
156
  scenarioId: z
157
157
  .string()
158
158
  .describe("Scenario whose capacity gap to close (e.g. 'stretch'). Must exist in config/plan/scenarios/ and be complete."),
@@ -184,8 +184,8 @@ export function registerConfigTools(server, allowed) {
184
184
  .describe("Max simulate_capacity calls before the agent must submit. Default: 5. Hard cap: 20."),
185
185
  writeFile: z
186
186
  .boolean()
187
- .default(true)
188
- .describe("When true (default), commit the proposal as a draft scenario. Pass false to inspect inline only."),
187
+ .default(false)
188
+ .describe("When true, commit the proposal as a draft scenario for compare_scenarios + promote_scenario. Default: false (exploratory). Pass true to materialize."),
189
189
  branch: z
190
190
  .string()
191
191
  .optional()
@@ -258,7 +258,7 @@ export function registerConfigTools(server, allowed) {
258
258
  })));
259
259
  }
260
260
  if (allowed.has("opportunity_search")) {
261
- server.tool("opportunity_search", "Use a Claude agent to find the deployment of a fixed budget that maximizes capacity gain on a target measure. Sibling to gap_analysis with opposite objective: where gap_analysis closes a gap to zero, opportunity_search maximizes upside under a budget constraint. Same tool surface (simulate_capacity + submit_final_proposal). Writes the agent's best deployment as a draft scenario at `config/plan/scenarios/proposed-opportunity-{measure}-{ts}.yaml` (override with `writeFile: false`). Use `compare_scenarios` to verify, then `promote_scenario` to make it active.", {
261
+ server.tool("opportunity_search", "Use a Claude agent to find the deployment of a fixed budget that maximizes capacity gain on a target measure. Sibling to gap_analysis with opposite objective: where gap_analysis closes a gap to zero, opportunity_search maximizes upside under a budget constraint. Same tool surface (simulate_capacity + submit_final_proposal). Output is exploratory by default — pass `writeFile: true` to materialize the deployment as a draft scenario at `config/plan/scenarios/proposed-opportunity-{measure}-{ts}.yaml`, then use `compare_scenarios` to verify and `promote_scenario` to make it active.", {
262
262
  scenarioId: z
263
263
  .string()
264
264
  .describe("Source scenario id (e.g. 'base'). Must exist and be complete."),
@@ -290,8 +290,8 @@ export function registerConfigTools(server, allowed) {
290
290
  .describe("Max simulate_capacity calls before the agent must submit. Default: 5. Hard cap: 20."),
291
291
  writeFile: z
292
292
  .boolean()
293
- .default(true)
294
- .describe("When true (default), commit the deployment as a draft scenario. Pass false to inspect inline only."),
293
+ .default(false)
294
+ .describe("When true, commit the deployment as a draft scenario for compare_scenarios + promote_scenario. Default: false (exploratory). Pass true to materialize."),
295
295
  branch: z
296
296
  .string()
297
297
  .optional()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loopops/mcp-server",
3
- "version": "2.4.1",
3
+ "version": "2.5.0",
4
4
  "description": "Loop Operations MCP Server — AI skills for RevOps",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",