@browserstack/mcp-server 1.5.0-beta.20 → 1.5.0-beta.22

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.
@@ -564,8 +564,9 @@
564
564
  ],
565
565
  "intent": "Get the AI insight (summary, root cause, recommendations) for a completed run — use this for 'why did this run regress or fail?'",
566
566
  "guidance": [
567
+ "This is the canonical answer to a 'summarize this run' / 'give me a summary' request: return ONLY these AI insight summary points and stop. Do NOT also call getLoadTestRunReport or append KPIs / web vitals / transactions unless the user explicitly asks for them.",
567
568
  "Only meaningful after the run is terminal; a running job returns an in_progress state, not a report.",
568
- "May return 503 if the insight backend is unavailable — retry later."
569
+ "May return 503 if the insight backend is unavailable — retry later. If no insight exists for the run, fall back to a brief status + headline KPIs from getLoadTestRunReport, not the full report."
569
570
  ],
570
571
  "returns": [
571
572
  "state",
@@ -681,7 +682,8 @@
681
682
  "groupBy and errorCategory narrow the payload; byteCap hard-caps the response (max 256 KB).",
682
683
  "metrics accepts dotted names or @ aliases; see getLoadTestMetricsManifest for what applies to this test type.",
683
684
  "Answer a scoped question with the narrowest slice instead of the whole report: one metric → metrics=; error breakdown → errorCategory= (or slaOnly=true); a time window → sinceIso/untilIso; slowest transaction → detail=per-txn with groupBy=transaction and topN.",
684
- "One call with the right params returns everything for that question — do not re-fetch the same run with the same params. Fetch the full report (view=full / detail=full) only when the user explicitly asks for the raw or complete report."
685
+ "One call with the right params returns everything for that question — do not re-fetch the same run with the same params. Fetch the full report (view=full / detail=full) only when the user explicitly asks for the raw or complete report.",
686
+ "A plain 'summarize this run' / 'give me a summary' request is answered by getLoadTestInsightSummary, NOT this endpoint. Only call this when the user asks for specific KPIs, SLA verdicts, web vitals, transactions, or the raw/complete report."
685
687
  ],
686
688
  "returns": [
687
689
  "runId",
@@ -938,7 +940,8 @@
938
940
  "name": "name",
939
941
  "type": "string",
940
942
  "required": true,
941
- "description": "Test name."
943
+ "maxLength": 255,
944
+ "description": "Test name. Max 255 characters — truncate before sending; a longer name is rejected with a 400."
942
945
  },
943
946
  {
944
947
  "name": "testType",
@@ -1026,7 +1029,10 @@
1026
1029
  "Only THREE things must be known before creating, and each is taken from the user's request when they've stated it — ask ONLY for the ones still missing, and ask about nothing else: (1) testType — plu (protocol / API load), blu (real-browser load) or hybrid (both); (2) framework — k6 / jmeter / gatling / locust for plu, playwright / selenium / webdriverio / nightwatch for blu; (3) the script — a built-in sample (scriptRef:{source:'sample'}; for Selenium also pass scriptRef.subType) OR the user's own script via the pendingScriptUpload flow. Do not guess a framework/testType, but do not re-ask for one the user already gave.",
1027
1030
  "There is no clone capability. To duplicate a test, getLoadTest the source and copy its full config into this create — vuRamp/vus, durationSec, loadGeneratorLocations and slaThresholds included; nothing is inherited from the source, so anything you omit is dropped.",
1028
1031
  "DEFAULTS apply ONLY after the three mandatory fields (testType, framework, script) are known — they never substitute for a missing one of those. Everything BEYOND those three — do not ask about it; apply the default unless the user explicitly specifies otherwise: loadProfile='constant', config.vus=1, config.durationSec=30, region us-east-1 (omit loadGeneratorLocations so the backend defaults it), and NO advanced features (do not enable log capture, response capture, artifacts, thresholds, etc.). Send config.vus=1 + config.durationSec=30 with no vuRamp for the default constant profile.",
1029
- "Only when the user explicitly asks for a different load shape, set config.loadProfile: 'ramping' (config.vuRamp: array of {vus, durationSec} stages; ramp up/down is inferred from adjacent VU deltas), 'iterations' (PLU only — config.iterations = fixed run count, plus config.vus), or 'throughput' (PLU and only JMeter/Gatling/locust/k6 — config.targetRps + config.maxVus + config.durationSec). A stage's own 'type' is NOT honored — every stage persists as a hold."
1032
+ "Only when the user explicitly asks for a different load shape, set config.loadProfile: 'ramping' (config.vuRamp: array of {vus, durationSec} stages; ramp up/down is inferred from adjacent VU deltas), 'iterations' (PLU only — config.iterations = fixed run count, plus config.vus), or 'throughput' (PLU and only JMeter/Gatling/locust/k6 — config.targetRps + config.maxVus + config.durationSec). A stage's own 'type' is NOT honored — every stage persists as a hold.",
1033
+ "testType='hybrid' REQUIRES children[] with the PLU leg (top-level is the BLU leg). NEVER call create with testType='hybrid' and no children[] — it is rejected 'hybrid testType requires children[]'. If you don't yet have both legs' framework+script, ASK for them first; do not submit a hybrid without children to 'see what happens'.",
1034
+ "On a 400, FIX the payload per the error message and only then resend — NEVER resubmit an unchanged payload (add children[] for hybrid, shorten name to <=255, supply testType+framework). Do not call getLoadTest after a FAILED create; there is nothing to fetch. Repeatedly retrying the same rejected body is the main source of wasted create calls.",
1035
+ "Always send idempotencyKey, and reuse the SAME key across retries of one logical create, so a late success can't create a duplicate test."
1030
1036
  ],
1031
1037
  "returns": [
1032
1038
  "testId",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@browserstack/mcp-server",
3
- "version": "1.5.0-beta.20",
3
+ "version": "1.5.0-beta.22",
4
4
  "description": "BrowserStack's Official MCP Server",
5
5
  "mcpName": "io.github.browserstack/mcp-server",
6
6
  "main": "dist/index.js",