@browserstack/mcp-server 1.5.0-beta.2 → 1.5.0-beta.4

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.
@@ -581,14 +581,7 @@
581
581
  {
582
582
  "name": "errorCategory",
583
583
  "type": "string",
584
- "values": [
585
- "5xx",
586
- "4xx",
587
- "timeout",
588
- "connection",
589
- "assertion"
590
- ],
591
- "description": "Comma-separated error categories to include."
584
+ "description": "Comma-separated error categories — any combination of: 5xx, 4xx, timeout, connection, assertion (e.g. \"5xx,4xx\")."
592
585
  },
593
586
  {
594
587
  "name": "metrics",
@@ -754,7 +747,9 @@
754
747
  "Read-only despite being a POST — nothing is started.",
755
748
  "fitsInQuota / remainingAfterEstimate compare the estimate against current quota.",
756
749
  "For the same check at start time, call startLoadTestRun with dryRun:true.",
757
- "Always use this for a cost or VU-hour estimate of a hypothetical run — it models ramp-up. Do not compute VU-hours by hand from VUs × duration."
750
+ "Always use this for a cost or VU-hour estimate of a hypothetical run — it models ramp-up. Do not compute VU-hours by hand from VUs × duration.",
751
+ "A protocol (plu) run is billed at a full load-generator pod's capacity (e.g. 1000 VUs for k6), not the VUs it actually uses, and carries a minimum billing floor (5 minutes) — so a small or short plu run can estimate far higher than VUs × duration would suggest. That is expected; report the returned estimatedVuHours as-is rather than second-guessing it as an error.",
752
+ "The estimate is for the test's OWN type: a browser (blu) run costs about 10x a protocol (plu) run at the same VUs and duration (browser VUs carry a 10x weight). So the number depends heavily on whether the test is plu, blu or hybrid — always state which type the estimate is for. When the user asks about a hypothetical run without fixing the type, do not silently inherit the type of whatever test you priced against: say the type explicitly, and if it is genuinely open, give both the plu and blu figures (they differ ~10x) or ask which they mean."
758
753
  ],
759
754
  "returns": [
760
755
  "estimatedVuHours",
@@ -941,7 +936,10 @@
941
936
  "guidance": [
942
937
  "Provide exactly one of projectId or projectName; projectName creates the project if absent.",
943
938
  "Script upload is two-phase: send pendingScriptUpload to get a presigned uploadUrl + s3Key, PUT the file, then call create again with the scriptRef source and s3Key returned in the response's nextStep.",
944
- "Pass idempotencyKey so a retried create does not duplicate the test."
939
+ "Pass idempotencyKey so a retried create does not duplicate the test.",
940
+ "testType and framework are required and are never inferred: testType is plu (protocol / API load), blu (real-browser load) or hybrid (both); framework is the load tool (k6, jmeter, gatling, locust). If the user has not stated them, ask — do not guess a default.",
941
+ "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.",
942
+ "The load profile is required too and is never defaulted: the concurrency (config.vus, or a config.vuRamp for a ramp) and the run length (config.durationSec). If the user has not given the VUs and duration, ask for them — do not assume a value."
945
943
  ],
946
944
  "returns": [
947
945
  "testId",
@@ -1021,7 +1019,8 @@
1021
1019
  "guidance": [
1022
1020
  "testId is the numeric test id, not a run id.",
1023
1021
  "dryRun:true returns the VU-hour estimate and quota fit without starting anything.",
1024
- "On success returns runId (UUID) + dashboardLink; poll getLoadTestRunStatus with the runId."
1022
+ "On success returns runId (UUID) + dashboardLink; poll getLoadTestRunStatus with the runId.",
1023
+ "A run without dryRun generates real load and consumes VU-hours. Unless the user has already asked to run it now, dryRun:true first, show the estimate/quota fit and the parameters that will be used (VUs, duration, target), and start the real run only after the user confirms — do not treat your own confirmation as the user's."
1025
1024
  ],
1026
1025
  "returns": [
1027
1026
  "runId",
@@ -1304,13 +1303,21 @@
1304
1303
  "type": "string"
1305
1304
  }
1306
1305
  ]
1306
+ },
1307
+ {
1308
+ "name": "runId",
1309
+ "type": "string",
1310
+ "description": "Tag a specific RUN instead of the test definition. When set, config.tags is applied to that run's own tags (the saved test is NOT changed); only config.tags may accompany runId. Omit it to edit the test."
1307
1311
  }
1308
1312
  ],
1309
- "intent": "Update an existing load test's name or configuration — use this to change tags, SLA thresholds, script or settings.",
1313
+ "intent": "Update an existing load test's name or configuration — use this to change tags, SLA thresholds, script or settings; also tags a specific run when runId is set.",
1310
1314
  "guidance": [
1311
1315
  "Partial update: send only the fields to change.",
1312
1316
  "Pass ifVersion for optimistic concurrency; a stale value returns 409 VERSION_CONFLICT.",
1313
- "Script replacement uses the same two-phase pendingScriptUpload flow as create."
1317
+ "Script replacement uses the same two-phase pendingScriptUpload flow as create.",
1318
+ "config is a partial update, but each field it carries REPLACES that field wholesale — it does not merge. tags overwrites the entire tag set; it does not append. To add a tag to a test (or the same tag across several tests), getLoadTest each one first and send the union under config.tags.",
1319
+ "To tag a specific RUN rather than the test, pass runId (a run UUID from listLoadTestRuns) together with config.tags — the tags apply to that one run and the saved test is untouched. A run inherits the test's tags until you set its own; setting run tags overrides (they also replace wholesale, so send the union to add). Omit runId to tag the test itself.",
1320
+ "Tags live on the load test, not on its runs — there is no per-run tagging, so do not touch runs when asked to tag a test. To tag every test in a project, list them with listLoadTests and page through with cursor until hasMore is false, then updateLoadTest each one — do not stop after the first page or a subset."
1314
1321
  ],
1315
1322
  "returns": [
1316
1323
  "testId",
@@ -1353,13 +1360,7 @@
1353
1360
  {
1354
1361
  "name": "include",
1355
1362
  "type": "string",
1356
- "values": [
1357
- "config",
1358
- "thresholds",
1359
- "tags",
1360
- "children"
1361
- ],
1362
- "description": "Comma-separated sub-resources to expand."
1363
+ "description": "Comma-separated sub-resources to expand — any combination of: config, thresholds, tags, children (e.g. \"config,thresholds\"). Ask for everything you need in ONE call (include=config,thresholds,tags) rather than one request per sub-resource."
1363
1364
  },
1364
1365
  {
1365
1366
  "name": "fields",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@browserstack/mcp-server",
3
- "version": "1.5.0-beta.2",
3
+ "version": "1.5.0-beta.4",
4
4
  "description": "BrowserStack's Official MCP Server",
5
5
  "mcpName": "io.github.browserstack/mcp-server",
6
6
  "main": "dist/index.js",