appium-mcp 1.85.5 → 1.85.7

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/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## [1.85.7](https://github.com/appium/appium-mcp/compare/v1.85.6...v1.85.7) (2026-06-16)
2
+
3
+ ### Miscellaneous Chores
4
+
5
+ * **otel:** add OTEL_RESOURCE_ATTRIBUTES env ([#408](https://github.com/appium/appium-mcp/issues/408)) ([d4cbbfb](https://github.com/appium/appium-mcp/commit/d4cbbfbbefd7520853d8fd2e58e6fe6e4a8628e9))
6
+
7
+ ### Code Refactoring
8
+
9
+ * store local selected device as one class ([#406](https://github.com/appium/appium-mcp/issues/406)) ([a44107e](https://github.com/appium/appium-mcp/commit/a44107e144d6c8221515689913d52e6f492b63a6))
10
+
11
+ ## [1.85.6](https://github.com/appium/appium-mcp/compare/v1.85.5...v1.85.6) (2026-06-14)
12
+
13
+ ### Miscellaneous Chores
14
+
15
+ * make telemetry deps optional ([#405](https://github.com/appium/appium-mcp/issues/405)) ([7607832](https://github.com/appium/appium-mcp/commit/7607832495c7e3b99e2de0a9f6e2a56ba9d2dd39))
16
+
1
17
  ## [1.85.5](https://github.com/appium/appium-mcp/compare/v1.85.4...v1.85.5) (2026-06-13)
2
18
 
3
19
  ### Bug Fixes
package/README.md CHANGED
@@ -41,7 +41,12 @@ Before you begin, ensure you have the following installed:
41
41
  - **Android SDK** (for Android testing)
42
42
  - **Xcode** (for iOS testing on macOS)
43
43
 
44
- ### Mobile Testing Setup
44
+ MCP Appium supports two driver modes:
45
+
46
+ - **Embedded local drivers**: when `appium_session_management` creates an `android` or `ios` session without `remoteServerUrl`, MCP Appium uses the bundled `appium-uiautomator2-driver` or `appium-xcuitest-driver` dependency directly. You still need the platform toolchains below, but you do not need to install a global Appium server or run `appium driver install uiautomator2` / `appium driver install xcuitest` for this mode.
47
+ - **Remote WebDriver/Appium server**: when `remoteServerUrl` is provided to `action=create` or `action=attach`, MCP Appium uses the `webdriver` client to talk to that existing server. In this mode the remote server is responsible for its installed drivers, plugins, device access, and capability handling. Use this mode for `platform=general`; embedded local creation is available only for Android and iOS.
48
+
49
+ ### Mobile Testing Setup for embedded local drivers
45
50
 
46
51
  #### Android
47
52
 
@@ -49,7 +54,7 @@ Before you begin, ensure you have the following installed:
49
54
  2. Set the `ANDROID_HOME` environment variable.
50
55
  3. Add the Android SDK tools to your system's PATH.
51
56
  4. Enable USB debugging on your Android device.
52
- 5. Install the Appium UiAutomator2 driver dependencies.
57
+ 5. Install the Android platform tools/build tools and keep `adb` available on `PATH`.
53
58
 
54
59
  #### iOS (macOS only)
55
60
 
@@ -135,7 +140,7 @@ This will automatically configure the MCP server for use with Claude Code. Make
135
140
 
136
141
  ### Environment Variables
137
142
 
138
- > **Note:** Appium driver prerequisites (`ANDROID_HOME`, `JAVA_HOME`, UiAutomator2/XCUITest driver setup) are not listed here, they are system-level requirements. Once this MCP server is configured, ask your AI assistant to set up the environment for you using the built-in `appium_skills` tool.
143
+ > **Note:** For embedded local Android/iOS sessions, MCP Appium already includes the UiAutomator2 and XCUITest driver packages. The system-level requirements are the platform toolchains (`ANDROID_HOME`, Java, Android SDK tools, Xcode/iOS signing or simulator setup). For remote sessions, configure those requirements on the remote Appium/WebDriver server instead.
139
144
 
140
145
  | Variable | Required | Description |
141
146
  | ----------------------------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -160,6 +165,7 @@ This will automatically configure the MCP server for use with Claude Code. Make
160
165
  | `OTEL_SERVICE_NAME` | Optional | Service name reported to the OpenTelemetry collector (example: `appium-mcp`). |
161
166
  | `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | Optional | OTLP/HTTP traces endpoint (example: `http://127.0.0.1:4318/v1/traces`). |
162
167
  | `OTEL_TRACES_SAMPLER` | Optional | Trace sampling strategy; `parentbased_always_on` samples new root traces and follows parent decisions. |
168
+ | `OTEL_RESOURCE_ATTRIBUTES` | Optional | Comma-separated `key=value` pairs attached as resource attributes to every span (example: `testcase.id=my-test-123,team=platform`). |
163
169
 
164
170
  ### OpenTelemetry tracing
165
171
 
@@ -169,6 +175,8 @@ OpenTelemetry tracing is disabled by default. Set `APPIUM_MCP_OTEL_ENABLED=true`
169
175
  APPIUM_MCP_OTEL_ENABLED=true
170
176
  # Optional: include sanitized non-sensitive argument values in spans.
171
177
  # APPIUM_MCP_OTEL_INCLUDE_ARGUMENT_VALUES=true
178
+ # Optional: attach custom key=value pairs to every span (e.g. test case ID, team name).
179
+ # OTEL_RESOURCE_ATTRIBUTES=testcase.id=my-test-123,team=platform
172
180
  OTEL_SERVICE_NAME=appium-mcp
173
181
  OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://127.0.0.1:4318/v1/traces
174
182
  OTEL_TRACES_SAMPLER=parentbased_always_on
@@ -495,6 +503,7 @@ MCP Appium provides a comprehensive set of tools organized into the following ca
495
503
  | `appium_driver_settings` | Read or update Appium driver session settings in one tool. `action=get` returns current settings as JSON; `action=update` merges a `settings` map (driver-specific keys; use `action=get` first to inspect). |
496
504
 
497
505
  The remote server URL in `appium_session_management` (action=create or action=attach) can be set via the `remoteServerUrl` parameter.
506
+ When `remoteServerUrl` is omitted, `action=create` starts an embedded local UiAutomator2 or XCUITest driver for `platform=android` or `platform=ios`. `platform=general` requires `remoteServerUrl`. When `remoteServerUrl` is present, `action=create` calls WebDriver `newSession` on the remote server, and `action=attach` connects MCP Appium to an existing remote session without owning its lifecycle.
498
507
  If `REMOTE_SERVER_URL_ALLOW_REGEX` is set, the URL must match the provided regex pattern for security reasons.
499
508
  This allows you to restrict which remote servers can be used with your MCP Appium instance, preventing unauthorized connections.
500
509
  The default regex pattern allows any URL that starts with `http://` or `https://`.
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAelE,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAE5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;IAEhD;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAQD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,OAAO,CAAC,CAwKlB"}
1
+ {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAelE,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAE5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;IAEhD;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAQD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,OAAO,CAAC,CA+KlB"}
@@ -59,8 +59,13 @@ export async function createAppiumMcpServer(options = {}) {
59
59
  },
60
60
  });
61
61
  installPolicy(server, policy);
62
- await initializeOpenTelemetry();
63
- installTelemetryWrappers(server);
62
+ try {
63
+ await initializeOpenTelemetry();
64
+ installTelemetryWrappers(server);
65
+ }
66
+ catch (error) {
67
+ log.error('Failed to initialize OpenTelemetry, telemetry will not be available:', error);
68
+ }
64
69
  // -------------------------------------------------------------------------
65
70
  // 1. Install plugin hooks BEFORE registering any tools so that every built-in
66
71
  // and plugin tool is wrapped with beforeCall / afterCall.
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/create-session.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAkBpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,wCAAyC,CAAC;AAG5E,UAAU,YAAY;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AASD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,YAAY,GACzB,YAAY,CAQd;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EAC3C,cAAc,EAAE,OAAO,GACtB,YAAY,CAiCd;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EAC3C,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,YAAY,CAAC,CA2DvB;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,EAChD,eAAe,CAAC,EAAE,MAAM,GACvB,aAAa,GAAG,SAAS,CAa3B;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAKN;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,QAAQ,EAAE,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,aAAa,CAAC,CAmIzB;AA2FD,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"create-session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/create-session.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAepD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,wCAAyC,CAAC;AAG5E,UAAU,YAAY;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AASD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,YAAY,GACzB,YAAY,CAQd;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EAC3C,cAAc,EAAE,OAAO,GACtB,YAAY,CAqCd;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EAC3C,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,YAAY,CAAC,CA8DvB;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,EAChD,eAAe,CAAC,EAAE,MAAM,GACvB,aAAa,GAAG,SAAS,CAe3B;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAKN;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,QAAQ,EAAE,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,aAAa,CAAC,CAmIzB;AA2FD,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -5,7 +5,7 @@ import { getPortFromUrl } from '../../utils/url.js';
5
5
  import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
6
6
  import { XCUITestDriver } from 'appium-xcuitest-driver';
7
7
  import { setSession, listSessions } from '../../session-store.js';
8
- import { getSelectedDevice, getSelectedDevicePlatform, getSelectedDeviceType, getSelectedDeviceInfo, clearSelectedDevice, } from './select-device.js';
8
+ import { clearSelectedDevice, getSelectedLocalDevice, } from './select-device.js';
9
9
  import { IOSManager } from '../../devicemanager/ios-manager.js';
10
10
  import log from '../../logger.js';
11
11
  import { createUIResource, createSessionDashboardUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
@@ -40,8 +40,9 @@ export function buildAndroidCapabilities(configCaps, customCaps, isRemoteServer)
40
40
  'appium:automationName': 'UiAutomator2',
41
41
  'appium:deviceName': 'Android Device',
42
42
  };
43
- const selectedDeviceUdid = !isRemoteServer && getSelectedDevicePlatform() === 'android'
44
- ? getSelectedDevice()
43
+ const selectedLocalDevice = getSelectedLocalDevice();
44
+ const selectedDeviceUdid = !isRemoteServer && selectedLocalDevice?.platform === 'android'
45
+ ? selectedLocalDevice?.udid
45
46
  : undefined;
46
47
  const additionalCaps = {
47
48
  'appium:settings[actionAcknowledgmentTimeout]': 0,
@@ -57,7 +58,10 @@ export function buildAndroidCapabilities(configCaps, customCaps, isRemoteServer)
57
58
  ...(selectedDeviceUdid && { 'appium:udid': selectedDeviceUdid }),
58
59
  ...customCaps,
59
60
  };
60
- if (selectedDeviceUdid) {
61
+ if (selectedLocalDevice) {
62
+ // clear the selected device since we're now using it to create a session,
63
+ // so it doesn't affect future session creations that don't specify a device.
64
+ // Clearing it later would cause race conditions if multiple session creations happen in parallel.
61
65
  clearSelectedDevice();
62
66
  }
63
67
  return filterEmptyCapabilities(capabilities);
@@ -72,7 +76,8 @@ export async function validateIOSDeviceSelection(deviceType) {
72
76
  const iosManager = IOSManager.getInstance();
73
77
  const devices = await iosManager.getDevicesByType(deviceType);
74
78
  if (devices.length > 1) {
75
- const selectedDevice = getSelectedDevice();
79
+ const selectedLocalDevice = getSelectedLocalDevice();
80
+ const selectedDevice = selectedLocalDevice?.udid;
76
81
  if (!selectedDevice) {
77
82
  throw new Error(`Multiple iOS ${deviceType === 'simulator' ? 'simulators' : 'devices'} found (${devices.length}). Use select_device with platform=ios and iosDeviceType=${deviceType} to choose one, then call appium_session_management with action=create.`);
78
83
  }
@@ -82,16 +87,15 @@ export async function validateIOSDeviceSelection(deviceType) {
82
87
  * Build iOS capabilities by merging defaults, config, device selection, and custom capabilities
83
88
  */
84
89
  export async function buildIOSCapabilities(configCaps, customCaps, isRemoteServer) {
85
- const deviceType = isRemoteServer ? null : getSelectedDeviceType();
90
+ const selectedLocalDevice = getSelectedLocalDevice();
91
+ const selectedIOSDevice = !isRemoteServer && selectedLocalDevice?.platform === 'ios'
92
+ ? selectedLocalDevice
93
+ : null;
94
+ const deviceType = selectedIOSDevice?.type || null;
86
95
  await validateIOSDeviceSelection(deviceType);
87
96
  // Get selected device info BEFORE constructing defaultCaps so we can use the actual device name
88
- const hasSelectedIOSDevice = !isRemoteServer && getSelectedDevicePlatform() === 'ios';
89
- const selectedDeviceUdid = hasSelectedIOSDevice
90
- ? getSelectedDevice()
91
- : undefined;
92
- const selectedDeviceInfo = hasSelectedIOSDevice
93
- ? getSelectedDeviceInfo()
94
- : undefined;
97
+ const selectedDeviceUdid = selectedIOSDevice?.udid;
98
+ const selectedDeviceInfo = selectedIOSDevice?.info;
95
99
  log.debug('Selected device info:', selectedDeviceInfo);
96
100
  const defaultCaps = {
97
101
  platformName: 'iOS',
@@ -124,7 +128,10 @@ export async function buildIOSCapabilities(configCaps, customCaps, isRemoteServe
124
128
  // customCaps should override additionalCaps.
125
129
  ...customCaps,
126
130
  };
127
- if (selectedDeviceUdid) {
131
+ if (selectedIOSDevice) {
132
+ // clear the selected device since we're now using it to create a session,
133
+ // so it doesn't affect future session creations that don't specify a device.
134
+ // Clearing it later would cause race conditions if multiple session creations happen in parallel.
128
135
  clearSelectedDevice();
129
136
  }
130
137
  return filterEmptyCapabilities(capabilities);
@@ -136,7 +143,8 @@ export function validateLocalCreatePlatformMatch(platform, remoteServerUrl) {
136
143
  if (remoteServerUrl || platform === 'general') {
137
144
  return undefined;
138
145
  }
139
- const selectedPlatform = getSelectedDevicePlatform();
146
+ const selectedLocalDevice = getSelectedLocalDevice();
147
+ const selectedPlatform = selectedLocalDevice?.platform;
140
148
  if (selectedPlatform && selectedPlatform !== platform) {
141
149
  return errorResult(`platform=${platform} does not match select_device (platform=${selectedPlatform}).`);
142
150
  }
@@ -274,7 +282,7 @@ function buildCreateSessionFailureMessage(error, ctx) {
274
282
  }
275
283
  const caps = ctx.finalCapabilities ?? {};
276
284
  const hasDeviceTarget = Boolean(caps['appium:udid'] || caps['appium:deviceName']) ||
277
- Boolean(getSelectedDevice());
285
+ Boolean(getSelectedLocalDevice());
278
286
  if (!hasDeviceTarget &&
279
287
  (ctx.platform === 'ios' || ctx.platform === 'android')) {
280
288
  return `${base} For local sessions without appium:udid (or a prior select_device), use select_device with a matching platform or pass target device capabilities, then action=create.`;
@@ -1 +1 @@
1
- {"version":3,"file":"create-session.js","sourceRoot":"","sources":["../../../src/tools/session/create-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-session.js","sourceRoot":"","sources":["../../../src/tools/session/create-session.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,25 @@
1
- export declare function getSelectedDevice(): string | null;
2
- export declare function getSelectedDevicePlatform(): 'android' | 'ios' | null;
3
- export declare function getSelectedDeviceType(): 'simulator' | 'real' | null;
4
- export declare function getSelectedDeviceInfo(): any;
1
+ export declare class SelectedLocalDevice {
2
+ /**
3
+ * Represents a selected local device for session creation.
4
+ * This is used to store the user's device selection from the select_device tool.
5
+ */
6
+ private _udid;
7
+ private _platform;
8
+ private _type;
9
+ private _info;
10
+ constructor(udid: string | null, platform: 'android' | 'ios' | null, type: 'simulator' | 'real' | null, info: any);
11
+ get udid(): string | null;
12
+ get platform(): 'android' | 'ios' | null;
13
+ get type(): 'simulator' | 'real' | null;
14
+ get info(): any;
15
+ }
16
+ /**
17
+ * @returns The currently selected local device, or null if no device is selected.
18
+ */
19
+ export declare function getSelectedLocalDevice(): SelectedLocalDevice | null;
20
+ /**
21
+ * @returns
22
+ */
5
23
  export declare function clearSelectedDevice(): void;
6
24
  export default function selectDevice(server: any): void;
7
25
  //# sourceMappingURL=select-device.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-device.d.ts","sourceRoot":"","sources":["../../../src/tools/session/select-device.ts"],"names":[],"mappings":"AA6BA,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,yBAAyB,IAAI,SAAS,GAAG,KAAK,GAAG,IAAI,CAEpE;AAED,wBAAgB,qBAAqB,IAAI,WAAW,GAAG,MAAM,GAAG,IAAI,CAEnE;AACD,wBAAgB,qBAAqB,IAAI,GAAG,CAE3C;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAqEtD"}
1
+ {"version":3,"file":"select-device.d.ts","sourceRoot":"","sources":["../../../src/tools/session/select-device.ts"],"names":[],"mappings":"AA0BA,qBAAa,mBAAmB;IAC9B;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,KAAK,CAAM;gBAGjB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,QAAQ,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI,EAClC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,EACjC,IAAI,EAAE,GAAG;IAQX,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAExB;IAED,IAAI,QAAQ,IAAI,SAAS,GAAG,KAAK,GAAG,IAAI,CAEvC;IAED,IAAI,IAAI,IAAI,WAAW,GAAG,MAAM,GAAG,IAAI,CAEtC;IAED,IAAI,IAAI,IAAI,GAAG,CAEd;CACF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,GAAG,IAAI,CAEnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAqEtD"}
@@ -7,28 +7,47 @@ import { z } from 'zod';
7
7
  import log from '../../logger.js';
8
8
  import { createUIResource, createDevicePickerUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
9
9
  import { errorResult, textResult, toolErrorMessage } from '../tool-response.js';
10
- // Store selected device globally
11
- let selectedDeviceUdid = null;
12
- let selectedDevicePlatform = null;
13
- let selectedDeviceType = null;
14
- let selectedDeviceInfo = null;
15
- export function getSelectedDevice() {
16
- return selectedDeviceUdid;
17
- }
18
- export function getSelectedDevicePlatform() {
19
- return selectedDevicePlatform;
20
- }
21
- export function getSelectedDeviceType() {
22
- return selectedDeviceType;
10
+ // Store selected local device globally
11
+ let selectedLocalDevice = null;
12
+ export class SelectedLocalDevice {
13
+ /**
14
+ * Represents a selected local device for session creation.
15
+ * This is used to store the user's device selection from the select_device tool.
16
+ */
17
+ _udid;
18
+ _platform;
19
+ _type;
20
+ _info;
21
+ constructor(udid, platform, type, info) {
22
+ this._udid = udid;
23
+ this._platform = platform;
24
+ this._type = type;
25
+ this._info = info;
26
+ }
27
+ get udid() {
28
+ return this._udid;
29
+ }
30
+ get platform() {
31
+ return this._platform;
32
+ }
33
+ get type() {
34
+ return this._type;
35
+ }
36
+ get info() {
37
+ return this._info;
38
+ }
23
39
  }
24
- export function getSelectedDeviceInfo() {
25
- return selectedDeviceInfo;
40
+ /**
41
+ * @returns The currently selected local device, or null if no device is selected.
42
+ */
43
+ export function getSelectedLocalDevice() {
44
+ return selectedLocalDevice;
26
45
  }
46
+ /**
47
+ * @returns
48
+ */
27
49
  export function clearSelectedDevice() {
28
- selectedDeviceUdid = null;
29
- selectedDevicePlatform = null;
30
- selectedDeviceType = null;
31
- selectedDeviceInfo = null;
50
+ selectedLocalDevice = null;
32
51
  }
33
52
  export default function selectDevice(server) {
34
53
  server.addTool({
@@ -108,12 +127,9 @@ function selectAndroidDevice(deviceUdid, devices) {
108
127
  if (!selectedDevice) {
109
128
  return errorResult(`Device with UDID "${deviceUdid}" not found. Available devices: ${devices.map((d) => d.udid).join(', ')}. Call select_device again with deviceUdid set to one of these values.`);
110
129
  }
111
- selectedDeviceUdid = deviceUdid;
112
- selectedDevicePlatform = 'android';
113
- selectedDeviceType = null;
114
- selectedDeviceInfo = selectedDevice;
115
130
  log.info(`Device selected: ${deviceUdid}`);
116
- return undefined;
131
+ selectedLocalDevice = new SelectedLocalDevice(deviceUdid, 'android', null, selectedDevice);
132
+ return selectedLocalDevice;
117
133
  }
118
134
  /**
119
135
  * Format device selection response for Android
@@ -175,12 +191,12 @@ function selectIOSDevice(deviceUdid, devices, iosDeviceType) {
175
191
  result: errorResult(`Device with UDID "${deviceUdid}" not found. Available devices: ${deviceList}. Call select_device again with deviceUdid set to one of these values.`),
176
192
  };
177
193
  }
178
- selectedDeviceUdid = deviceUdid;
179
- selectedDevicePlatform = 'ios';
180
- selectedDeviceType = iosDeviceType;
181
- selectedDeviceInfo = selectedDevice;
182
194
  log.info(`iOS ${iosDeviceType} selected: ${selectedDevice.name} (${deviceUdid})`);
183
- return { ok: true, device: selectedDevice };
195
+ selectedLocalDevice = new SelectedLocalDevice(deviceUdid, 'ios', iosDeviceType, selectedDevice);
196
+ return {
197
+ ok: true,
198
+ device: selectedLocalDevice,
199
+ };
184
200
  }
185
201
  /**
186
202
  * Format device selection response for iOS
@@ -217,17 +233,17 @@ async function handleAndroidDeviceSelection(deviceUdid) {
217
233
  }
218
234
  const { devices } = listed;
219
235
  if (deviceUdid) {
220
- const selectionError = selectAndroidDevice(deviceUdid, devices);
221
- if (selectionError) {
222
- return selectionError;
236
+ const selected = selectAndroidDevice(deviceUdid, devices);
237
+ if (!(selected instanceof SelectedLocalDevice)) {
238
+ return selected;
223
239
  }
224
240
  return formatAndroidSelectionResponse(deviceUdid);
225
241
  }
226
242
  // Auto-select when only one device is available
227
243
  if (devices.length === 1) {
228
- const selectionError = selectAndroidDevice(devices[0].udid, devices);
229
- if (selectionError) {
230
- return selectionError;
244
+ const selected = selectAndroidDevice(devices[0].udid, devices);
245
+ if (!(selected instanceof SelectedLocalDevice)) {
246
+ return selected;
231
247
  }
232
248
  return formatAndroidSelectionResponse(devices[0].udid);
233
249
  }
@@ -255,7 +271,7 @@ async function handleIOSDeviceSelection(iosDeviceType, deviceUdid) {
255
271
  if (!selected.ok) {
256
272
  return selected.result;
257
273
  }
258
- return formatIOSSelectionResponse(selected.device.name, deviceUdid);
274
+ return formatIOSSelectionResponse(selected.device.info.name, deviceUdid);
259
275
  }
260
276
  // Auto-select when only one device is available
261
277
  if (devices.length === 1) {
@@ -263,7 +279,7 @@ async function handleIOSDeviceSelection(iosDeviceType, deviceUdid) {
263
279
  if (!selected.ok) {
264
280
  return selected.result;
265
281
  }
266
- return formatIOSSelectionResponse(selected.device.name, devices[0].udid);
282
+ return formatIOSSelectionResponse(selected.device.info.name, devices[0].udid);
267
283
  }
268
284
  return formatIOSListResponse(devices, iosDeviceType);
269
285
  }
@@ -1 +1 @@
1
- {"version":3,"file":"select-device.js","sourceRoot":"","sources":["../../../src/tools/session/select-device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select-device.js","sourceRoot":"","sources":["../../../src/tools/session/select-device.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "appium-mcp",
3
3
  "mcpName": "io.github.appium/appium-mcp",
4
- "version": "1.85.5",
4
+ "version": "1.85.7",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",
@@ -60,9 +60,6 @@
60
60
  "@appium/mcp-documentation": "^1.0.1",
61
61
  "@appium/support": "^7.0.2",
62
62
  "@modelcontextprotocol/sdk": "^1.22.0",
63
- "@opentelemetry/api": "^1.9.1",
64
- "@opentelemetry/exporter-trace-otlp-http": "^0.219.0",
65
- "@opentelemetry/sdk-node": "^0.219.0",
66
63
  "@xenova/transformers": "^2.17.2",
67
64
  "@xmldom/xmldom": "^0.9.8",
68
65
  "appium-adb": "^15.0.0",
@@ -79,6 +76,11 @@
79
76
  "xpath": "^0.0.34",
80
77
  "zod": "^4.3.6"
81
78
  },
79
+ "optionalDependencies": {
80
+ "@opentelemetry/api": "^1.9.1",
81
+ "@opentelemetry/exporter-trace-otlp-http": "^0.219.0",
82
+ "@opentelemetry/sdk-node": "^0.219.0"
83
+ },
82
84
  "devDependencies": {
83
85
  "@appium/eslint-config-appium-ts": "^3.0.0",
84
86
  "@appium/tsconfig": "^1.1.2",
package/server.json CHANGED
@@ -3,12 +3,12 @@
3
3
  "name": "io.github.appium/appium-mcp",
4
4
  "title": "MCP Appium - Mobile Development and Automation Server",
5
5
  "description": "MCP server for Appium mobile automation on iOS and Android devices with test creation tools.",
6
- "version": "1.85.5",
6
+ "version": "1.85.7",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "appium-mcp",
11
- "version": "1.85.5",
11
+ "version": "1.85.7",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  }
@@ -112,8 +112,15 @@ export async function createAppiumMcpServer(
112
112
  });
113
113
 
114
114
  installPolicy(server, policy);
115
- await initializeOpenTelemetry();
116
- installTelemetryWrappers(server);
115
+ try {
116
+ await initializeOpenTelemetry();
117
+ installTelemetryWrappers(server);
118
+ } catch (error) {
119
+ log.error(
120
+ 'Failed to initialize OpenTelemetry, telemetry will not be available:',
121
+ error
122
+ );
123
+ }
117
124
 
118
125
  // -------------------------------------------------------------------------
119
126
  // 1. Install plugin hooks BEFORE registering any tools so that every built-in
@@ -6,11 +6,8 @@ import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
6
6
  import { XCUITestDriver } from 'appium-xcuitest-driver';
7
7
  import { setSession, listSessions } from '../../session-store.js';
8
8
  import {
9
- getSelectedDevice,
10
- getSelectedDevicePlatform,
11
- getSelectedDeviceType,
12
- getSelectedDeviceInfo,
13
9
  clearSelectedDevice,
10
+ getSelectedLocalDevice,
14
11
  } from './select-device.js';
15
12
  import { IOSManager } from '../../devicemanager/ios-manager.js';
16
13
  import log from '../../logger.js';
@@ -76,9 +73,10 @@ export function buildAndroidCapabilities(
76
73
  'appium:deviceName': 'Android Device',
77
74
  };
78
75
 
76
+ const selectedLocalDevice = getSelectedLocalDevice();
79
77
  const selectedDeviceUdid =
80
- !isRemoteServer && getSelectedDevicePlatform() === 'android'
81
- ? getSelectedDevice()
78
+ !isRemoteServer && selectedLocalDevice?.platform === 'android'
79
+ ? selectedLocalDevice?.udid
82
80
  : undefined;
83
81
 
84
82
  const additionalCaps = {
@@ -97,7 +95,10 @@ export function buildAndroidCapabilities(
97
95
  ...customCaps,
98
96
  };
99
97
 
100
- if (selectedDeviceUdid) {
98
+ if (selectedLocalDevice) {
99
+ // clear the selected device since we're now using it to create a session,
100
+ // so it doesn't affect future session creations that don't specify a device.
101
+ // Clearing it later would cause race conditions if multiple session creations happen in parallel.
101
102
  clearSelectedDevice();
102
103
  }
103
104
 
@@ -118,7 +119,8 @@ export async function validateIOSDeviceSelection(
118
119
  const devices = await iosManager.getDevicesByType(deviceType);
119
120
 
120
121
  if (devices.length > 1) {
121
- const selectedDevice = getSelectedDevice();
122
+ const selectedLocalDevice = getSelectedLocalDevice();
123
+ const selectedDevice = selectedLocalDevice?.udid;
122
124
  if (!selectedDevice) {
123
125
  throw new Error(
124
126
  `Multiple iOS ${deviceType === 'simulator' ? 'simulators' : 'devices'} found (${devices.length}). Use select_device with platform=ios and iosDeviceType=${deviceType} to choose one, then call appium_session_management with action=create.`
@@ -135,18 +137,18 @@ export async function buildIOSCapabilities(
135
137
  customCaps: Record<string, any> | undefined,
136
138
  isRemoteServer: boolean
137
139
  ): Promise<Capabilities> {
138
- const deviceType = isRemoteServer ? null : getSelectedDeviceType();
140
+ const selectedLocalDevice = getSelectedLocalDevice();
141
+ const selectedIOSDevice =
142
+ !isRemoteServer && selectedLocalDevice?.platform === 'ios'
143
+ ? selectedLocalDevice
144
+ : null;
145
+
146
+ const deviceType = selectedIOSDevice?.type || null;
139
147
  await validateIOSDeviceSelection(deviceType);
140
148
 
141
149
  // Get selected device info BEFORE constructing defaultCaps so we can use the actual device name
142
- const hasSelectedIOSDevice =
143
- !isRemoteServer && getSelectedDevicePlatform() === 'ios';
144
- const selectedDeviceUdid = hasSelectedIOSDevice
145
- ? getSelectedDevice()
146
- : undefined;
147
- const selectedDeviceInfo = hasSelectedIOSDevice
148
- ? getSelectedDeviceInfo()
149
- : undefined;
150
+ const selectedDeviceUdid = selectedIOSDevice?.udid;
151
+ const selectedDeviceInfo = selectedIOSDevice?.info;
150
152
 
151
153
  log.debug('Selected device info:', selectedDeviceInfo);
152
154
 
@@ -188,7 +190,10 @@ export async function buildIOSCapabilities(
188
190
  ...customCaps,
189
191
  };
190
192
 
191
- if (selectedDeviceUdid) {
193
+ if (selectedIOSDevice) {
194
+ // clear the selected device since we're now using it to create a session,
195
+ // so it doesn't affect future session creations that don't specify a device.
196
+ // Clearing it later would cause race conditions if multiple session creations happen in parallel.
192
197
  clearSelectedDevice();
193
198
  }
194
199
 
@@ -206,7 +211,9 @@ export function validateLocalCreatePlatformMatch(
206
211
  return undefined;
207
212
  }
208
213
 
209
- const selectedPlatform = getSelectedDevicePlatform();
214
+ const selectedLocalDevice = getSelectedLocalDevice();
215
+
216
+ const selectedPlatform = selectedLocalDevice?.platform;
210
217
  if (selectedPlatform && selectedPlatform !== platform) {
211
218
  return errorResult(
212
219
  `platform=${platform} does not match select_device (platform=${selectedPlatform}).`
@@ -415,7 +422,7 @@ function buildCreateSessionFailureMessage(
415
422
  const caps: Record<string, any> = ctx.finalCapabilities ?? {};
416
423
  const hasDeviceTarget =
417
424
  Boolean(caps['appium:udid'] || caps['appium:deviceName']) ||
418
- Boolean(getSelectedDevice());
425
+ Boolean(getSelectedLocalDevice());
419
426
 
420
427
  if (
421
428
  !hasDeviceTarget &&
@@ -13,40 +13,68 @@ import {
13
13
  import type { ContentResult } from 'fastmcp';
14
14
  import { errorResult, textResult, toolErrorMessage } from '../tool-response.js';
15
15
 
16
- // Store selected device globally
17
- let selectedDeviceUdid: string | null = null;
18
- let selectedDevicePlatform: 'android' | 'ios' | null = null;
19
- let selectedDeviceType: 'simulator' | 'real' | null = null;
20
- let selectedDeviceInfo: any = null;
16
+ // Store selected local device globally
17
+ let selectedLocalDevice: SelectedLocalDevice | null = null;
21
18
 
22
19
  type DevicesOk = { ok: true; devices: any[] };
23
20
 
24
21
  type DevicesFail = { ok: false; result: ContentResult };
25
22
 
26
- type SelectIOSOk = { ok: true; device: any };
23
+ type SelectIOSOk = { ok: true; device: SelectedLocalDevice };
27
24
 
28
25
  type SelectIOSFail = { ok: false; result: ContentResult };
29
26
 
30
- export function getSelectedDevice(): string | null {
31
- return selectedDeviceUdid;
32
- }
27
+ export class SelectedLocalDevice {
28
+ /**
29
+ * Represents a selected local device for session creation.
30
+ * This is used to store the user's device selection from the select_device tool.
31
+ */
32
+ private _udid: string | null;
33
+ private _platform: 'android' | 'ios' | null;
34
+ private _type: 'simulator' | 'real' | null;
35
+ private _info: any;
36
+
37
+ constructor(
38
+ udid: string | null,
39
+ platform: 'android' | 'ios' | null,
40
+ type: 'simulator' | 'real' | null,
41
+ info: any
42
+ ) {
43
+ this._udid = udid;
44
+ this._platform = platform;
45
+ this._type = type;
46
+ this._info = info;
47
+ }
33
48
 
34
- export function getSelectedDevicePlatform(): 'android' | 'ios' | null {
35
- return selectedDevicePlatform;
36
- }
49
+ get udid(): string | null {
50
+ return this._udid;
51
+ }
52
+
53
+ get platform(): 'android' | 'ios' | null {
54
+ return this._platform;
55
+ }
56
+
57
+ get type(): 'simulator' | 'real' | null {
58
+ return this._type;
59
+ }
37
60
 
38
- export function getSelectedDeviceType(): 'simulator' | 'real' | null {
39
- return selectedDeviceType;
61
+ get info(): any {
62
+ return this._info;
63
+ }
40
64
  }
41
- export function getSelectedDeviceInfo(): any {
42
- return selectedDeviceInfo;
65
+
66
+ /**
67
+ * @returns The currently selected local device, or null if no device is selected.
68
+ */
69
+ export function getSelectedLocalDevice(): SelectedLocalDevice | null {
70
+ return selectedLocalDevice;
43
71
  }
44
72
 
73
+ /**
74
+ * @returns
75
+ */
45
76
  export function clearSelectedDevice(): void {
46
- selectedDeviceUdid = null;
47
- selectedDevicePlatform = null;
48
- selectedDeviceType = null;
49
- selectedDeviceInfo = null;
77
+ selectedLocalDevice = null;
50
78
  }
51
79
 
52
80
  export default function selectDevice(server: any): void {
@@ -145,7 +173,7 @@ async function getAndroidDevices(): Promise<DevicesOk | DevicesFail> {
145
173
  function selectAndroidDevice(
146
174
  deviceUdid: string,
147
175
  devices: any[]
148
- ): ContentResult | undefined {
176
+ ): ContentResult | SelectedLocalDevice {
149
177
  const selectedDevice = devices.find((d) => d.udid === deviceUdid);
150
178
  if (!selectedDevice) {
151
179
  return errorResult(
@@ -153,12 +181,14 @@ function selectAndroidDevice(
153
181
  );
154
182
  }
155
183
 
156
- selectedDeviceUdid = deviceUdid;
157
- selectedDevicePlatform = 'android';
158
- selectedDeviceType = null;
159
- selectedDeviceInfo = selectedDevice;
160
184
  log.info(`Device selected: ${deviceUdid}`);
161
- return undefined;
185
+ selectedLocalDevice = new SelectedLocalDevice(
186
+ deviceUdid,
187
+ 'android',
188
+ null,
189
+ selectedDevice
190
+ );
191
+ return selectedLocalDevice;
162
192
  }
163
193
 
164
194
  /**
@@ -256,15 +286,19 @@ function selectIOSDevice(
256
286
  };
257
287
  }
258
288
 
259
- selectedDeviceUdid = deviceUdid;
260
- selectedDevicePlatform = 'ios';
261
- selectedDeviceType = iosDeviceType;
262
- selectedDeviceInfo = selectedDevice;
263
289
  log.info(
264
290
  `iOS ${iosDeviceType} selected: ${selectedDevice.name} (${deviceUdid})`
265
291
  );
266
-
267
- return { ok: true, device: selectedDevice };
292
+ selectedLocalDevice = new SelectedLocalDevice(
293
+ deviceUdid,
294
+ 'ios',
295
+ iosDeviceType,
296
+ selectedDevice
297
+ );
298
+ return {
299
+ ok: true,
300
+ device: selectedLocalDevice,
301
+ };
268
302
  }
269
303
 
270
304
  /**
@@ -331,18 +365,18 @@ async function handleAndroidDeviceSelection(
331
365
  const { devices } = listed;
332
366
 
333
367
  if (deviceUdid) {
334
- const selectionError = selectAndroidDevice(deviceUdid, devices);
335
- if (selectionError) {
336
- return selectionError;
368
+ const selected = selectAndroidDevice(deviceUdid, devices);
369
+ if (!(selected instanceof SelectedLocalDevice)) {
370
+ return selected;
337
371
  }
338
372
  return formatAndroidSelectionResponse(deviceUdid);
339
373
  }
340
374
 
341
375
  // Auto-select when only one device is available
342
376
  if (devices.length === 1) {
343
- const selectionError = selectAndroidDevice(devices[0].udid, devices);
344
- if (selectionError) {
345
- return selectionError;
377
+ const selected = selectAndroidDevice(devices[0].udid, devices);
378
+ if (!(selected instanceof SelectedLocalDevice)) {
379
+ return selected;
346
380
  }
347
381
  return formatAndroidSelectionResponse(devices[0].udid);
348
382
  }
@@ -380,7 +414,7 @@ async function handleIOSDeviceSelection(
380
414
  if (!selected.ok) {
381
415
  return selected.result;
382
416
  }
383
- return formatIOSSelectionResponse(selected.device.name, deviceUdid);
417
+ return formatIOSSelectionResponse(selected.device.info.name, deviceUdid);
384
418
  }
385
419
 
386
420
  // Auto-select when only one device is available
@@ -389,7 +423,10 @@ async function handleIOSDeviceSelection(
389
423
  if (!selected.ok) {
390
424
  return selected.result;
391
425
  }
392
- return formatIOSSelectionResponse(selected.device.name, devices[0].udid);
426
+ return formatIOSSelectionResponse(
427
+ selected.device.info.name,
428
+ devices[0].udid
429
+ );
393
430
  }
394
431
 
395
432
  return formatIOSListResponse(devices, iosDeviceType!);