@browserstack/mcp-server 2.3.0-beta.7 → 2.3.0-beta.9
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/devicecontrol.capability-index.json +25 -16
- package/capability/loadtesting.capability-index.json +2934 -2933
- package/capability/mobiledevicecontrol.capability-index.json +60 -61
- package/capability/tm.capability-index.json +49977 -49971
- package/capability/tra.capability-index.json +31584 -31583
- package/dist/tools/applive.js +1 -1
- package/dist/tools/capability-registry/register.js +9 -2
- package/dist/tools/capability-registry/types.d.ts +8 -0
- package/package.json +1 -1
|
@@ -3,58 +3,48 @@
|
|
|
3
3
|
"version": "1.0",
|
|
4
4
|
"build_id": "6782f7e_2026-10-16T13:54:22Z",
|
|
5
5
|
"mobiledevicecontrol": {
|
|
6
|
-
"
|
|
6
|
+
"title": "Mobile Device Control (App Automate)",
|
|
7
|
+
"summary": "Mobile device control: run a real Android or iOS device and drive the app on it step by step. The account side lists the devices this account can use, including private ones, uploads and lists app builds, reports parallel-session capacity, and keeps each session's record \u2014 status, shareable link and video \u2014 after the device is released. The session side starts a device with an installed build and drives it: find elements and read their text, position and attributes, tap them, type, swipe, screenshot, press keys, rotate, switch between the native app and a web view, move between the native app and a web view, and launch or close apps. Apps are RUN here \u2014 unlike Test Management, which authors cases, and Test Reporting, which records results pushed in from a runner. Browsers are not here \u2014 those are device control, which drives a page rather than an installed app \u2014 and neither is App Live: it has no API an agent can drive, so agent sessions run on App Automate and consume its minutes. A build must exist before a session starts; it is uploaded here from a public link, or from a file on the user's own machine when the server runs there. App Live keeps a separate store, so an app uploaded for manual App Live testing is not available to sessions here. Media for camera injection must come from elsewhere. The default Appium server is 1.x and rejects every `mobile:` command; ask for 2.19.0.",
|
|
7
8
|
"routing_terms": [
|
|
8
9
|
"app automate",
|
|
10
|
+
"app build",
|
|
11
|
+
"app for automation",
|
|
9
12
|
"appium",
|
|
10
13
|
"appium session",
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"mobile app",
|
|
14
|
-
"drive the app",
|
|
15
|
-
"tap",
|
|
16
|
-
"swipe",
|
|
17
|
-
"scroll",
|
|
18
|
-
"ui tree",
|
|
19
|
-
"page source",
|
|
14
|
+
"close app",
|
|
15
|
+
"device control",
|
|
20
16
|
"device list",
|
|
21
|
-
"
|
|
22
|
-
"
|
|
17
|
+
"device property",
|
|
18
|
+
"drive a device",
|
|
19
|
+
"drive the app",
|
|
20
|
+
"foreground app",
|
|
21
|
+
"getprop",
|
|
22
|
+
"hardware button",
|
|
23
|
+
"home button",
|
|
24
|
+
"keyboard",
|
|
25
|
+
"keyboard open",
|
|
26
|
+
"launch app",
|
|
27
|
+
"local build",
|
|
28
|
+
"mobile app",
|
|
29
|
+
"mobile device control",
|
|
30
|
+
"os build",
|
|
23
31
|
"parallel sessions",
|
|
24
32
|
"plan",
|
|
25
|
-
"screenshot",
|
|
26
|
-
"session video",
|
|
27
|
-
"public link",
|
|
28
33
|
"private device",
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"close app",
|
|
34
|
+
"public link",
|
|
35
|
+
"real device",
|
|
32
36
|
"restart app",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"qr code",
|
|
39
|
-
"annotate",
|
|
40
|
-
"keyboard",
|
|
41
|
-
"keyboard open",
|
|
42
|
-
"home button",
|
|
43
|
-
"volume",
|
|
44
|
-
"hardware button",
|
|
45
|
-
"gps",
|
|
46
|
-
"location",
|
|
47
|
-
"foreground app",
|
|
48
|
-
"adb",
|
|
49
|
-
"device property",
|
|
50
|
-
"getprop",
|
|
51
|
-
"os build",
|
|
37
|
+
"screenshot",
|
|
38
|
+
"scroll",
|
|
39
|
+
"session video",
|
|
40
|
+
"swipe",
|
|
41
|
+
"tap",
|
|
52
42
|
"upload apk",
|
|
43
|
+
"upload app",
|
|
44
|
+
"upload app for device",
|
|
53
45
|
"upload ipa",
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"device control",
|
|
57
|
-
"drive a device"
|
|
46
|
+
"volume",
|
|
47
|
+
"webdriver"
|
|
58
48
|
],
|
|
59
49
|
"base_url": "https://hub-cloud.browserstack.com",
|
|
60
50
|
"auth": {
|
|
@@ -69,25 +59,32 @@
|
|
|
69
59
|
"mode": "write",
|
|
70
60
|
"entity": "app_session",
|
|
71
61
|
"intent": "Start a live Appium session on a real Android or iOS device with an uploaded app \u2014 use this before reading the screen, tapping, typing or swiping in the app.",
|
|
72
|
-
"guidance":
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
62
|
+
"guidance": {
|
|
63
|
+
"shared": [
|
|
64
|
+
"The app must already be uploaded: pass the bs:// URL from upload_app_build or list_app_builds, or the custom_id it was uploaded under, which always resolves to the newest build with that id.",
|
|
65
|
+
"Allocation and app install usually take 20\u201330 seconds; the response carries the new session id at value.sessionId \u2014 carry it into every other app_session call.",
|
|
66
|
+
"The session ends itself after idle_timeout seconds with no command (90 by default, 900 at most) and after 2 hours in total. Keep calling, or call get_window_rect as a cheap keep-alive, while deciding the next step.",
|
|
67
|
+
"Every session occupies a device and consumes App Automate minutes until it ends: always finish with set_session_status and then delete_session.",
|
|
68
|
+
"To let a person watch the device live while the agent drives it, set interactive_debugging true and leave video on; they then open the running session on the App Automate dashboard and start the interactive session there. That window is two-way: a person's taps and scrolls reach the same device, so ask them to watch only, or find the element you are about to act on again before every action.",
|
|
69
|
+
"device_name and platform_version must be a combination mobile device control offers; an unknown pair fails with a session-not-created error naming the capability.",
|
|
70
|
+
"Set appium_version to 2.19.0 for any session that will scroll with scroll_gesture, dismiss an iOS keyboard with dismiss_keyboard_key, or use any other mobile: capability; the default server is 1.x and answers those with a 404 listing the commands it does know.",
|
|
71
|
+
"enable_biometric, enable_camera_image_injection and upload_media only take effect when set here \u2014 none of them can be turned on once the session is running.",
|
|
72
|
+
"Credentials belong in the Authorization header, never inside bstack:options: capabilities are echoed back in session-not-created errors.",
|
|
73
|
+
"device_name and platform_version come from list_devices; get_plan first if sessions are queueing rather than starting.",
|
|
74
|
+
"Treat a response without value.sessionId as a failed start even when the status is 200, and treat a failed call the same way: allocation can outlast the client's own timeout, so BrowserStack may have started a session the answer never named. One is then holding a device and consuming minutes until its idle timeout.",
|
|
75
|
+
"After a start that failed or returned no session id, look for a session left running on the account and end it rather than starting another.",
|
|
76
|
+
"The response carries no link of any kind \u2014 it is the session id and the negotiated capabilities only. Call get_session for the links: browser_url to watch the run on the dashboard, and public_url to share it with someone who has no BrowserStack account.",
|
|
77
|
+
"LANGUAGE AND LOCALE LAND IN DIFFERENT PLACES ON THE TWO PLATFORMS. On Android they change the device, and the app with it \u2014 measured with language de and locale DE: the system's own permission dialog came up in German and the app rendered German throughout. On iOS they leave the device alone \u2014 Settings and General stay in English \u2014 and apply to the app under test at launch. Either way nothing is visible unless the app actually ships that language, so test with an app that does and read the strings back with get_element_text rather than trusting the call's 200.",
|
|
78
|
+
"Both are accepted without complaint on both platforms, so a 200 says nothing about whether anything changed. There is also no way to confirm the device locale from inside the session: read_device_property refuses getprop persist.sys.locale and ro.product.locale as unsupported commands. Judge it from what is on screen.",
|
|
79
|
+
"Someone can only WATCH AND INTERACT if interactive_debugging was set true in this call \u2014 it cannot be turned on once the session is running, it is off by default on Android, and it needs video left on. Ask for it up front when a person is going to follow along, because the alternative is restarting the session."
|
|
80
|
+
],
|
|
81
|
+
"local": [
|
|
82
|
+
"ON THE USER'S OWN MACHINE YOU CAN OPEN THE LIVE VIEW FOR THEM. This call returns only value.sessionId; call get_session straight after it, then run the shell command open \"<browser_url>\" on macOS or xdg-open \"<browser_url>\" on Linux, and say you opened the session on the App Automate dashboard \u2014 it needs a BrowserStack login in that browser. Set interactive_debugging true in this call when they should be able to tap as well as watch; without it the view is watch-only."
|
|
83
|
+
],
|
|
84
|
+
"remote": [
|
|
85
|
+
"THIS CALL RETURNS NO LINK \u2014 only value.sessionId. Nothing here can open a browser for the user either: this surface makes HTTP requests, and on a remote server there is no browser to open. So never say a live view was opened. If the user may want to watch, call get_session straight after this and give them browser_url in the same reply, which is the session on the dashboard and needs a BrowserStack login. public_url needs no login but carries an auth token, so offer it only when they ask to share outside the team."
|
|
86
|
+
]
|
|
87
|
+
},
|
|
91
88
|
"body": [
|
|
92
89
|
{
|
|
93
90
|
"name": "platform_name",
|
|
@@ -1093,8 +1090,9 @@
|
|
|
1093
1090
|
"path": "/app-automate/upload",
|
|
1094
1091
|
"mode": "write",
|
|
1095
1092
|
"entity": "app_build",
|
|
1096
|
-
"intent": "Upload an app build to App Automate from a public download link and get back the bs:// URL a session installs
|
|
1093
|
+
"intent": "Upload an app build to App Automate \u2014 the store device sessions install from, separate from App Live's \u2014 from a public download link, and get back the bs:// URL a session installs. Use this to make a new .apk, .aab or .ipa available to the devices an agent drives.",
|
|
1097
1094
|
"guidance": [
|
|
1095
|
+
"APP LIVE KEEPS A SEPARATE STORE. An app uploaded for App Live (manual, exploratory testing in a person's browser) is not available here, and one uploaded here does not appear in App Live \u2014 so when the app is going to be driven by you, tapped, typed into or scrolled by capability calls, upload it HERE, whatever the user calls the testing. The bs:// this returns is the one create_session installs.",
|
|
1098
1096
|
"Only the download-link form can be used here. The same endpoint also accepts a multipart upload carrying the file itself, which this surface cannot send \u2014 so for a build that exists only on the caller's own machine, give them that multipart request to run themselves and take the bs:// url it returns. The upload answers with the bs:// url directly: there is no intermediate storage, no presigned url and no second call. There is no way to hand the bytes over from here.",
|
|
1099
1097
|
"The url must be https and reachable by BrowserStack without credentials; a link behind a login fails on their side, not the caller's.",
|
|
1100
1098
|
"Pass custom_id to give the build a stable name, then later sessions can use that name in place of the bs:// URL and always get the newest build under it.",
|
|
@@ -2885,6 +2883,7 @@
|
|
|
2885
2883
|
"intent": "Upload an app build that is on this machine to App Automate and get back the bs:// URL a session installs \u2014 use this when the .apk, .aab or .ipa is a local file rather than a download link.",
|
|
2886
2884
|
"guidance": {
|
|
2887
2885
|
"shared": [
|
|
2886
|
+
"APP LIVE KEEPS A SEPARATE STORE. An app uploaded for App Live (manual, exploratory testing in a person's browser) is not available here, and one uploaded here does not appear in App Live \u2014 so when the app is going to be driven by you, tapped, typed into or scrolled by capability calls, upload it HERE, whatever the user calls the testing. The bs:// this returns is the one create_session installs.",
|
|
2888
2887
|
"Only .apk, .aab and .ipa are accepted.",
|
|
2889
2888
|
"A large build takes minutes, because the upload does not return until the whole file has been sent.",
|
|
2890
2889
|
"upload_app_build takes a public https link instead, and list_app_builds reuses a build already on the account \u2014 builds last 30 days."
|