@browserstack/mcp-server 1.5.0-beta.10 → 1.5.0-beta.12
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/capability/loadtesting.capability-index.json +33 -7
- package/capability/tm.capability-index.json +313 -112
- package/dist/tools/capability-registry/bind.js +159 -5
- package/dist/tools/capability-registry/register.d.ts +6 -0
- package/dist/tools/capability-registry/register.js +144 -77
- package/dist/tools/capability-registry/search.d.ts +10 -4
- package/dist/tools/capability-registry/search.js +80 -22
- package/dist/tools/capability-registry/types.d.ts +42 -6
- package/package.json +1 -1
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"capabilities": [
|
|
13
13
|
{
|
|
14
|
+
"name": "getLoadTestPlatformStatus",
|
|
14
15
|
"method": "GET",
|
|
15
16
|
"path": "/api/v1/agent/platform/status",
|
|
16
17
|
"mode": "read",
|
|
@@ -41,6 +42,7 @@
|
|
|
41
42
|
}
|
|
42
43
|
},
|
|
43
44
|
{
|
|
45
|
+
"name": "listLoadTestProjects",
|
|
44
46
|
"method": "GET",
|
|
45
47
|
"path": "/api/v1/agent/projects",
|
|
46
48
|
"mode": "read",
|
|
@@ -95,6 +97,7 @@
|
|
|
95
97
|
"max_page_size": 100
|
|
96
98
|
},
|
|
97
99
|
{
|
|
100
|
+
"name": "listLoadTests",
|
|
98
101
|
"method": "GET",
|
|
99
102
|
"path": "/api/v1/agent/projects/{projectId}/loadTests",
|
|
100
103
|
"mode": "read",
|
|
@@ -187,6 +190,7 @@
|
|
|
187
190
|
"max_page_size": 100
|
|
188
191
|
},
|
|
189
192
|
{
|
|
193
|
+
"name": "getLoadTestProjectTrends",
|
|
190
194
|
"method": "GET",
|
|
191
195
|
"path": "/api/v1/agent/projects/{projectId}/trends",
|
|
192
196
|
"mode": "read",
|
|
@@ -267,6 +271,7 @@
|
|
|
267
271
|
}
|
|
268
272
|
},
|
|
269
273
|
{
|
|
274
|
+
"name": "listProjectLoadTestRuns",
|
|
270
275
|
"method": "GET",
|
|
271
276
|
"path": "/api/v1/agent/projects/{projectId}/runs",
|
|
272
277
|
"mode": "read",
|
|
@@ -370,6 +375,7 @@
|
|
|
370
375
|
"max_page_size": 100
|
|
371
376
|
},
|
|
372
377
|
{
|
|
378
|
+
"name": "listActiveLoadTestRuns",
|
|
373
379
|
"method": "GET",
|
|
374
380
|
"path": "/api/v1/agent/loadTests/runs/active",
|
|
375
381
|
"mode": "read",
|
|
@@ -427,6 +433,7 @@
|
|
|
427
433
|
}
|
|
428
434
|
},
|
|
429
435
|
{
|
|
436
|
+
"name": "getLoadTestRunStatus",
|
|
430
437
|
"method": "GET",
|
|
431
438
|
"path": "/api/v1/agent/loadTests/runs/{jobId}/status",
|
|
432
439
|
"mode": "read",
|
|
@@ -480,6 +487,7 @@
|
|
|
480
487
|
}
|
|
481
488
|
},
|
|
482
489
|
{
|
|
490
|
+
"name": "getLoadTestInsightSummary",
|
|
483
491
|
"method": "GET",
|
|
484
492
|
"path": "/api/v1/agent/loadTests/runs/{jobId}/insights",
|
|
485
493
|
"mode": "read",
|
|
@@ -528,15 +536,16 @@
|
|
|
528
536
|
"404": {
|
|
529
537
|
"$response": "NotFound"
|
|
530
538
|
},
|
|
531
|
-
"503": {
|
|
532
|
-
"$response": "ServiceUnavailable"
|
|
533
|
-
},
|
|
534
539
|
"500": {
|
|
535
540
|
"$response": "InternalServerError"
|
|
541
|
+
},
|
|
542
|
+
"503": {
|
|
543
|
+
"$response": "ServiceUnavailable"
|
|
536
544
|
}
|
|
537
545
|
}
|
|
538
546
|
},
|
|
539
547
|
{
|
|
548
|
+
"name": "getLoadTestRunReport",
|
|
540
549
|
"method": "GET",
|
|
541
550
|
"path": "/api/v1/agent/loadTests/runs/{jobId}/report",
|
|
542
551
|
"mode": "read",
|
|
@@ -656,6 +665,7 @@
|
|
|
656
665
|
}
|
|
657
666
|
},
|
|
658
667
|
{
|
|
668
|
+
"name": "stopLoadTestRun",
|
|
659
669
|
"method": "POST",
|
|
660
670
|
"path": "/api/v1/agent/loadTests/runs/{jobId}/stop",
|
|
661
671
|
"mode": "write",
|
|
@@ -697,6 +707,7 @@
|
|
|
697
707
|
}
|
|
698
708
|
},
|
|
699
709
|
{
|
|
710
|
+
"name": "getLoadTestQuota",
|
|
700
711
|
"method": "GET",
|
|
701
712
|
"path": "/api/v1/agent/loadTests/quota",
|
|
702
713
|
"mode": "read",
|
|
@@ -727,6 +738,7 @@
|
|
|
727
738
|
}
|
|
728
739
|
},
|
|
729
740
|
{
|
|
741
|
+
"name": "estimateLoadTestRunCost",
|
|
730
742
|
"method": "POST",
|
|
731
743
|
"path": "/api/v1/agent/loadTests/estimate",
|
|
732
744
|
"mode": "read",
|
|
@@ -787,6 +799,7 @@
|
|
|
787
799
|
}
|
|
788
800
|
},
|
|
789
801
|
{
|
|
802
|
+
"name": "compareLoadTestRuns",
|
|
790
803
|
"method": "POST",
|
|
791
804
|
"path": "/api/v1/agent/loadTests/compare",
|
|
792
805
|
"mode": "read",
|
|
@@ -866,6 +879,7 @@
|
|
|
866
879
|
}
|
|
867
880
|
},
|
|
868
881
|
{
|
|
882
|
+
"name": "createLoadTest",
|
|
869
883
|
"method": "POST",
|
|
870
884
|
"path": "/api/v1/agent/loadTests",
|
|
871
885
|
"mode": "write",
|
|
@@ -881,6 +895,7 @@
|
|
|
881
895
|
"name": "testType",
|
|
882
896
|
"type": "string",
|
|
883
897
|
"required": true,
|
|
898
|
+
"description": "plu = protocol/API load; blu = real-browser load; hybrid = BOTH in one test (one PLU leg + one BLU leg, supplied via children). These tokens are INTERNAL wire values — send them here but never show them to the user; the user-facing labels are 'API / Protocol' (plu), 'Browser' (blu) and 'Hybrid' (hybrid). All three are valid, user-selectable options — hybrid is not a rare/advanced variant, offer it alongside the other two.",
|
|
884
899
|
"values": [
|
|
885
900
|
"plu",
|
|
886
901
|
"blu",
|
|
@@ -922,7 +937,7 @@
|
|
|
922
937
|
{
|
|
923
938
|
"name": "children",
|
|
924
939
|
"type": "array",
|
|
925
|
-
"description": "Child scenarios for hybrid
|
|
940
|
+
"description": "Child scenarios for a hybrid test. A hybrid is exactly one PLU (protocol) leg + one BLU (browser) leg — each leg carries its own framework + scriptRef (a sample or an uploaded script). Send the BLU leg as the top-level testType='blu'/framework/config and put the PLU leg in children[] (one entry, testType='plu' with its framework + config.scriptRef). The backend requires exactly one PLU and one BLU leg and rejects any other composition."
|
|
926
941
|
},
|
|
927
942
|
{
|
|
928
943
|
"name": "idempotencyKey",
|
|
@@ -952,13 +967,16 @@
|
|
|
952
967
|
],
|
|
953
968
|
"intent": "Create a new load test in a project — use this to define a test before running it. JSON body only (no multipart).",
|
|
954
969
|
"guidance": [
|
|
970
|
+
"PRECONDITION — do NOT call this endpoint until THREE things are known: (1) testType (plu/blu/hybrid), (2) framework, (3) the script (a built-in sample or the user's own upload). These are MANDATORY and NOT defaultable — never infer or default them. If the user's request does not state one of the three, ASK the user for the missing ones and WAIT for their answer before creating. 'create a test' with no type/framework/script named means all three are missing → ask all three; do not silently pick k6/plu/sample. Only vus, duration, region and load profile are defaultable (see the DEFAULTS line) — the three above are not.",
|
|
971
|
+
"'plu' / 'blu' / 'hybrid' are INTERNAL wire values — send them in the request, but NEVER show them to the user. Do not print them in questions, option labels, confirmations, summaries, or prose (no 'Browser (BLU)', no '(plu+blu)'). User-facing labels are: plu → 'API / Protocol', blu → 'Browser', hybrid → 'Hybrid (both API and Browser)'. Frameworks (k6, jmeter, selenium, playwright, …) are real product names and ARE shown to the user.",
|
|
972
|
+
"When you ASK the user to pick testType or framework, present the FULL, exact option set — never drop, merge, or cross-contaminate options. testType: offer all THREE, using the user-facing labels above — 'API / Protocol', 'Browser', and 'Hybrid'; do not omit Hybrid. framework (ask AFTER testType is chosen, and show only that type's frameworks, each as its OWN separate option): for an API/Protocol test offer exactly k6, jmeter, gatling AND locust (all four — do not drop locust); for a Browser test offer exactly playwright, selenium, webdriverio AND nightwatch (all four — never list the API/Protocol frameworks under a Browser test, and never merge selenium and playwright into one option). For a Hybrid test, collect an API/Protocol leg (its framework + script) AND a Browser leg (its framework + script) and assemble them per the children field — Hybrid needs both legs, so it takes more than the three questions a single-type test does.",
|
|
955
973
|
"Provide exactly one of projectId or projectName; projectName creates the project if absent.",
|
|
956
974
|
"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.",
|
|
957
975
|
"To spin up a test from a built-in sample with NO file handling (the dashboard's 'use sample script'), pass scriptRef:{source:'sample'} — the platform's bundled sample for the given framework is used. For Selenium, also pass scriptRef.subType (testng|junit|vanillajava|python|pytest|jest|serenity-cucumber) to pick the binding. testType and framework are still needed; the load profile defaults to constant 1 VU / 30s (see below).",
|
|
958
976
|
"Pass idempotencyKey so a retried create does not duplicate the test.",
|
|
959
977
|
"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.",
|
|
960
978
|
"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.",
|
|
961
|
-
"Everything BEYOND those three
|
|
979
|
+
"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.",
|
|
962
980
|
"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."
|
|
963
981
|
],
|
|
964
982
|
"returns": [
|
|
@@ -984,6 +1002,7 @@
|
|
|
984
1002
|
}
|
|
985
1003
|
},
|
|
986
1004
|
{
|
|
1005
|
+
"name": "startLoadTestRun",
|
|
987
1006
|
"method": "POST",
|
|
988
1007
|
"path": "/api/v1/agent/loadTests/{testId}/runs",
|
|
989
1008
|
"mode": "write",
|
|
@@ -1068,6 +1087,7 @@
|
|
|
1068
1087
|
}
|
|
1069
1088
|
},
|
|
1070
1089
|
{
|
|
1090
|
+
"name": "listLoadTestRuns",
|
|
1071
1091
|
"method": "GET",
|
|
1072
1092
|
"path": "/api/v1/agent/loadTests/{testId}/runs",
|
|
1073
1093
|
"mode": "read",
|
|
@@ -1164,6 +1184,7 @@
|
|
|
1164
1184
|
"max_page_size": 100
|
|
1165
1185
|
},
|
|
1166
1186
|
{
|
|
1187
|
+
"name": "getLoadTestHistoricalTrends",
|
|
1167
1188
|
"method": "GET",
|
|
1168
1189
|
"path": "/api/v1/agent/loadTests/{testId}/trends",
|
|
1169
1190
|
"mode": "read",
|
|
@@ -1243,6 +1264,7 @@
|
|
|
1243
1264
|
}
|
|
1244
1265
|
},
|
|
1245
1266
|
{
|
|
1267
|
+
"name": "getLoadTestMetricsManifest",
|
|
1246
1268
|
"method": "GET",
|
|
1247
1269
|
"path": "/api/v1/agent/loadTests/{testId}/metricsManifest",
|
|
1248
1270
|
"mode": "read",
|
|
@@ -1283,6 +1305,7 @@
|
|
|
1283
1305
|
}
|
|
1284
1306
|
},
|
|
1285
1307
|
{
|
|
1308
|
+
"name": "updateLoadTest",
|
|
1286
1309
|
"method": "PUT",
|
|
1287
1310
|
"path": "/api/v1/agent/loadTests/{testId}",
|
|
1288
1311
|
"mode": "write",
|
|
@@ -1372,6 +1395,7 @@
|
|
|
1372
1395
|
}
|
|
1373
1396
|
},
|
|
1374
1397
|
{
|
|
1398
|
+
"name": "getLoadTest",
|
|
1375
1399
|
"method": "GET",
|
|
1376
1400
|
"path": "/api/v1/agent/loadTests/{testId}",
|
|
1377
1401
|
"mode": "read",
|
|
@@ -1601,7 +1625,8 @@
|
|
|
1601
1625
|
"stopLoadTestRun",
|
|
1602
1626
|
"getLoadTestRunStatus",
|
|
1603
1627
|
"listLoadTestRuns",
|
|
1604
|
-
"listActiveLoadTestRuns"
|
|
1628
|
+
"listActiveLoadTestRuns",
|
|
1629
|
+
"listProjectLoadTestRuns"
|
|
1605
1630
|
]
|
|
1606
1631
|
},
|
|
1607
1632
|
"project": {
|
|
@@ -1710,7 +1735,8 @@
|
|
|
1710
1735
|
}
|
|
1711
1736
|
],
|
|
1712
1737
|
"capabilities": [
|
|
1713
|
-
"getLoadTestHistoricalTrends"
|
|
1738
|
+
"getLoadTestHistoricalTrends",
|
|
1739
|
+
"getLoadTestProjectTrends"
|
|
1714
1740
|
]
|
|
1715
1741
|
},
|
|
1716
1742
|
"quota": {
|