appium-mcp 1.50.0 → 1.51.0
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 +6 -0
- package/README.md +1 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ios/prepare-ios-simulator.js +2 -2
- package/dist/tools/ios/prepare-ios-simulator.js.map +1 -1
- package/dist/tools/session/create-session.d.ts +2 -2
- package/dist/tools/session/create-session.js +7 -7
- package/dist/tools/session/select-device.d.ts.map +1 -1
- package/dist/tools/session/select-device.js +20 -5
- package/dist/tools/session/select-device.js.map +1 -1
- package/dist/tools/test-generation/generate-tests.js +1 -1
- package/dist/tools/test-generation/generate-tests.js.map +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/resources/submodules.zip +0 -0
- package/src/tools/README.md +1 -2
- package/src/tools/index.ts +0 -2
- package/src/tools/ios/prepare-ios-simulator.ts +2 -2
- package/src/tools/session/create-session.ts +7 -7
- package/src/tools/session/select-device.ts +27 -5
- package/src/tools/test-generation/generate-tests.ts +1 -1
- package/dist/tools/session/select-platform.d.ts +0 -2
- package/dist/tools/session/select-platform.d.ts.map +0 -1
- package/dist/tools/session/select-platform.js +0 -202
- package/dist/tools/session/select-platform.js.map +0 -1
- package/src/tools/session/select-platform.ts +0 -250
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [1.51.0](https://github.com/appium/appium-mcp/compare/v1.50.0...v1.51.0) (2026-04-10)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* consolidate `select_platform` into `select_device` ([#254](https://github.com/appium/appium-mcp/issues/254)) ([96d7303](https://github.com/appium/appium-mcp/commit/96d730302df4ad64e6e946a663416ebbdf925eb3))
|
|
6
|
+
|
|
1
7
|
## [1.50.0](https://github.com/appium/appium-mcp/compare/v1.49.1...v1.50.0) (2026-04-08)
|
|
2
8
|
|
|
3
9
|
### Features
|
package/README.md
CHANGED
|
@@ -293,8 +293,7 @@ MCP Appium provides a comprehensive set of tools organized into the following ca
|
|
|
293
293
|
|
|
294
294
|
| Tool | Description |
|
|
295
295
|
| ----------------- | ------------------------------------------------------------------------ |
|
|
296
|
-
| `
|
|
297
|
-
| `select_device` | Select a specific device when multiple devices are available |
|
|
296
|
+
| `select_device` | **REQUIRED FIRST**: Discover available devices and select one. Auto-selects if only one device found |
|
|
298
297
|
| `prepare_ios_simulator` | Boot an iOS/tvOS simulator, download WDA (if not cached), and install/launch WDA in a single call. Each step is skipped if already satisfied (iOS/tvOS only) |
|
|
299
298
|
|
|
300
299
|
### Session Management
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA6DlC,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAgJ3D"}
|
package/dist/tools/index.js
CHANGED
|
@@ -6,7 +6,6 @@ import deleteSession from './session/delete-session.js';
|
|
|
6
6
|
import listSessions from './session/list-sessions.js';
|
|
7
7
|
import selectSession from './session/select-session.js';
|
|
8
8
|
import generateLocators from './test-generation/locators.js';
|
|
9
|
-
import selectPlatform from './session/select-platform.js';
|
|
10
9
|
import selectDevice from './session/select-device.js';
|
|
11
10
|
import openNotifications from './session/open-notifications.js';
|
|
12
11
|
import shakeDevice from './session/shake.js';
|
|
@@ -117,7 +116,6 @@ export default function registerTools(server) {
|
|
|
117
116
|
});
|
|
118
117
|
};
|
|
119
118
|
// Session Management
|
|
120
|
-
selectPlatform(server);
|
|
121
119
|
selectDevice(server);
|
|
122
120
|
createSession(server);
|
|
123
121
|
listSessions(server);
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAeA,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,aAAa,MAAM,6BAA6B,CAAC;AACxD,OAAO,aAAa,MAAM,6BAA6B,CAAC;AACxD,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,aAAa,MAAM,6BAA6B,CAAC;AACxD,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -237,7 +237,7 @@ async function prepareSimulator(udid, skipWda, forceRefreshWda, platform = 'ios'
|
|
|
237
237
|
if (!simulator) {
|
|
238
238
|
result.boot = {
|
|
239
239
|
status: 'failed',
|
|
240
|
-
detail: `Simulator with UDID "${udid}" not found. Use
|
|
240
|
+
detail: `Simulator with UDID "${udid}" not found. Use select_device to get a valid UDID.`,
|
|
241
241
|
};
|
|
242
242
|
return result;
|
|
243
243
|
}
|
|
@@ -304,7 +304,7 @@ async function prepareSimulator(udid, skipWda, forceRefreshWda, platform = 'ios'
|
|
|
304
304
|
const prepareIosSimulatorSchema = z.object({
|
|
305
305
|
udid: z
|
|
306
306
|
.string()
|
|
307
|
-
.describe('The UDID of the iOS simulator to prepare. Use
|
|
307
|
+
.describe('The UDID of the iOS simulator to prepare. Use select_device to get this.'),
|
|
308
308
|
platform: z
|
|
309
309
|
.enum(['ios', 'tvos'])
|
|
310
310
|
.optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-ios-simulator.js","sourceRoot":"","sources":["../../../src/tools/ios/prepare-ios-simulator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAElC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAkBlC,SAAS,SAAS,CAAC,MAAc;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;AAED,2BAA2B;AAE3B,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED,6BAA6B;AAE7B,KAAK,UAAU,6BAA6B;IAC1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,oEAAoE,EACpE;QACE,OAAO,EAAE;YACP,YAAY,EAAE,YAAY;YAC1B,MAAM,EAAE,gCAAgC;SACzC;KACF,CACF,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,gCAAgC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0B,CAAC;IACjE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,QAAgB;IACvD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAChE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAC7B,QAAQ,CAAC,IAAiD,CAC3D,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,WAAgB,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,WAAW,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,OAAe;IACvD,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,4BAA4B;IACzC,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAErC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,gBAAgB,GAAG,QAAQ;SAC9B,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;SACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEpE,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,4BAA4B;AAE5B,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,aAAqB;IAErB,MAAM,SAAS,CAAC,yBAAyB,aAAa,MAAM,OAAO,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,QAAgB,EAChB,aAAqB;IAErB,MAAM,SAAS,CAAC,wBAAwB,aAAa,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAAe;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,0DAA0D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAC9F,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAOD,KAAK,UAAU,WAAW,CAAC,aAAqB;IAC9C,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,yCAAyC;IACzC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,0BAA0B,aAAa,UAAU,CAClD,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEhC,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,IACE,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBACxC,OAAe,EAAE,YAAY,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC1D,CAAC;gBACD,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,+DAA+D;IAC/D,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,uBAAuB,aAAa,kBAAkB,CACvD,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QACxD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,sBAAsB;AAEtB,KAAK,UAAU,iBAAiB,CAC9B,eAAwB,EACxB,WAA2B,KAAK;IAEhC,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtD,MAAM,cAAc,GAClB,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAE7E,2CAA2C;IAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,aAAa,GAAG,MAAM,4BAA4B,EAAE,CAAC;QAC3D,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAC7B,SAAS,CAAC,OAAO,aAAa,cAAc,QAAQ,EAAE,CAAC,EACvD,GAAG,cAAc,aAAa,CAC/B,CAAC;YACF,IAAI,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACpC,OAAO;oBACL,UAAU,EAAE,aAAa;oBACzB,OAAO,EAAE,aAAa;oBACtB,UAAU,EAAE,KAAK;iBAClB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,MAAM,6BAA6B,EAAE,CAAC;IACzD,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,UAAU,EAAE,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,QAAQ,EAAE,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACvB,eAAe,EACf,GAAG,cAAc,cAAc,OAAO,MAAM,CAC7C,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,cAAc,aAAa,CAAC,CAAC;IAEzE,sDAAsD;IACtD,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAChE,CAAC;IAED,mEAAmE;IACnE,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAG,+DAA+D,UAAU,IAAI,cAAc,cAAc,OAAO,MAAM,CAAC;IAC3I,GAAG,CAAC,IAAI,CAAC,6BAA6B,UAAU,KAAK,CAAC,CAAC;IACvD,MAAM,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEzC,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACzC,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;YAAS,CAAC;QACT,gFAAgF;QAChF,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,MAAqB,EACrB,IAAY,EACZ,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QAEzC,2BAA2B;QAC3B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,CAAC,WAAW,GAAG;gBACnB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,yCAAyC;aAClD,CAAC;YACF,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,OAAO;QACT,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,+BAA+B,IAAI,KAAK,CAAC,CAAC;YACnD,MAAM,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QAED,SAAS;QACT,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;QACtD,MAAM,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE3C,MAAM,CAAC,WAAW,GAAG;YACnB,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,QAAQ,CAAC,SAAS;gBACxB,CAAC,CAAC,oCAAoC,QAAQ,GAAG;gBACjD,CAAC,CAAC,+BAA+B,QAAQ,GAAG;SAC/C,CAAC;QACF,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,CAAC,WAAW,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IACnE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,IAAY,EACZ,OAAgB,EAChB,eAAwB,EACxB,WAA2B,KAAK;IAEhC,MAAM,MAAM,GAAkB;QAC5B,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QACvC,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/C,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9C,KAAK,EAAE,KAAK;QACZ,IAAI;KACL,CAAC;IAEF,+BAA+B;IAC/B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAE9D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,GAAG;gBACZ,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,wBAAwB,IAAI,yEAAyE;aAC9G,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,GAAG;gBACZ,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,oBAAoB;aAC9C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,qBAAqB,SAAS,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1B,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,GAAG;gBACZ,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,sBAAsB;aAChD,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,YAAY,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACpE,MAAM,CAAC,WAAW,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACnE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6BAA6B;IAC7B,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QACpE,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACjC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAE/B,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,CAAC,YAAY,GAAG;gBACpB,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,QAAQ,QAAQ,CAAC,OAAO,gCAAgC,UAAU,EAAE;aAC7E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,YAAY,GAAG;gBACpB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,QAAQ,QAAQ,CAAC,OAAO,sBAAsB,UAAU,EAAE;aACnE,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,CAAC,YAAY,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClE,MAAM,CAAC,WAAW,GAAG;YACnB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,qBAAqB;SAC9B,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qCAAqC;IACrC,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0BAA0B;AAE1B,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CACP,8FAA8F,CAC/F;IACH,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;SACrB,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,mGAAmG,CACpG;IACH,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,yFAAyF,CAC1F;IACH,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,kEAAkE,CACnE;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,MAAe;IACzD,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,gQAAgQ;QAClQ,UAAU,EAAE,yBAAyB;QACrC,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EACZ,IAA+C,EACvB,EAAE;YAC1B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,EACJ,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,eAAe,GAAG,KAAK,GACxB,GAAG,IAAI,CAAC;YAET,GAAG,CAAC,IAAI,CACN,aAAa,QAAQ,cAAc,IAAI,aAAa,OAAO,qBAAqB,eAAe,GAAG,CACnG,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,IAAI,EACJ,OAAO,EACP,eAAe,EACf,QAAQ,CACT,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;qBAC7B;iBACF;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"prepare-ios-simulator.js","sourceRoot":"","sources":["../../../src/tools/ios/prepare-ios-simulator.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,12 +44,12 @@ export declare function validateRemoteServerUrl(remoteServerUrl: string, regexRu
|
|
|
44
44
|
*
|
|
45
45
|
* @tool create_session
|
|
46
46
|
* @description Creates a new mobile session with Android or iOS device. Requires prior
|
|
47
|
-
* platform selection via the
|
|
47
|
+
* platform selection via the select_device tool. Supports both local and remote
|
|
48
48
|
* Appium server connections.
|
|
49
49
|
*
|
|
50
50
|
* @param {Object} args - Tool execution arguments
|
|
51
51
|
* @param {'ios' | 'android'} args.platform - REQUIRED. The target platform, must match
|
|
52
|
-
* the platform explicitly selected via
|
|
52
|
+
* the platform explicitly selected via select_device tool
|
|
53
53
|
* @param {Object} [args.capabilities] - Optional custom W3C format capabilities
|
|
54
54
|
* @param {string} [args.remoteServerUrl] - Optional remote Appium server URL
|
|
55
55
|
* (e.g., http://localhost:4723). If not provided, uses local Appium server
|
|
@@ -193,12 +193,12 @@ async function createDriverSession(driver, capabilities) {
|
|
|
193
193
|
*
|
|
194
194
|
* @tool create_session
|
|
195
195
|
* @description Creates a new mobile session with Android or iOS device. Requires prior
|
|
196
|
-
* platform selection via the
|
|
196
|
+
* platform selection via the select_device tool. Supports both local and remote
|
|
197
197
|
* Appium server connections.
|
|
198
198
|
*
|
|
199
199
|
* @param {Object} args - Tool execution arguments
|
|
200
200
|
* @param {'ios' | 'android'} args.platform - REQUIRED. The target platform, must match
|
|
201
|
-
* the platform explicitly selected via
|
|
201
|
+
* the platform explicitly selected via select_device tool
|
|
202
202
|
* @param {Object} [args.capabilities] - Optional custom W3C format capabilities
|
|
203
203
|
* @param {string} [args.remoteServerUrl] - Optional remote Appium server URL
|
|
204
204
|
* (e.g., http://localhost:4723). If not provided, uses local Appium server
|
|
@@ -218,12 +218,12 @@ export default function createSession(server) {
|
|
|
218
218
|
name: 'create_session',
|
|
219
219
|
description: `Create a new Appium session with Android, iOS or any device/driver Appium supports.
|
|
220
220
|
WORKFLOW FOR LOCAL SERVERS (no remoteServerUrl):
|
|
221
|
-
- Use
|
|
222
|
-
- Then
|
|
223
|
-
-
|
|
221
|
+
- Use select_device tool FIRST to discover devices and let the user choose platform and device
|
|
222
|
+
- Then call create_session with the selected platform
|
|
223
|
+
- For iOS simulators, call prepare_ios_simulator before create_session
|
|
224
224
|
- DO NOT assume or default to any platform
|
|
225
225
|
WORKFLOW FOR REMOTE SERVERS (remoteServerUrl provided):
|
|
226
|
-
- SKIP
|
|
226
|
+
- SKIP select_device tool entirely
|
|
227
227
|
- Infer the platform from the user's request (e.g., 'ios', 'android', or 'general')
|
|
228
228
|
- If platform is 'general', treat the provided capabilities as a pass-through W3C/Appium capability set (useful for non-Android/iOS drivers like Windows, macOS, or custom drivers)
|
|
229
229
|
- Infer device type from context when possible (e.g., 'simulator', 'real device')
|
|
@@ -232,7 +232,7 @@ export default function createSession(server) {
|
|
|
232
232
|
`,
|
|
233
233
|
parameters: z.object({
|
|
234
234
|
platform: z.enum(['ios', 'android', 'general']).describe(`REQUIRED: Platform to use.
|
|
235
|
-
- For local servers, this must match the platform the user explicitly selected via the
|
|
235
|
+
- For local servers, this must match the platform the user explicitly selected via the select_device tool ('ios' or 'android').
|
|
236
236
|
- Use 'general' when you want the tool to treat capabilities as a pass-through Appium/W3C capability set (recommended for non-Android/iOS drivers such as Windows, macOS, or other custom Appium servers). 'general' will not apply any platform-specific defaults.
|
|
237
237
|
- If remoteServerUrl is provided, the assistant should confirm or infer the platform from the conversation; do not assume a default.`),
|
|
238
238
|
capabilities: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-device.d.ts","sourceRoot":"","sources":["../../../src/tools/session/select-device.ts"],"names":[],"mappings":"AAkBA,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,qBAAqB,IAAI,WAAW,GAAG,MAAM,GAAG,IAAI,CAEnE;AAED,wBAAgB,qBAAqB,IAAI,GAAG,CAE3C;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;
|
|
1
|
+
{"version":3,"file":"select-device.d.ts","sourceRoot":"","sources":["../../../src/tools/session/select-device.ts"],"names":[],"mappings":"AAkBA,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,qBAAqB,IAAI,WAAW,GAAG,MAAM,GAAG,IAAI,CAEnE;AAED,wBAAgB,qBAAqB,IAAI,GAAG,CAE3C;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AA+PD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAmEtD"}
|
|
@@ -167,30 +167,45 @@ async function handleAndroidDeviceSelection(deviceUdid) {
|
|
|
167
167
|
selectAndroidDevice(deviceUdid, devices);
|
|
168
168
|
return formatAndroidSelectionResponse(deviceUdid);
|
|
169
169
|
}
|
|
170
|
+
// Auto-select when only one device is available
|
|
171
|
+
if (devices.length === 1) {
|
|
172
|
+
selectAndroidDevice(devices[0].udid, devices);
|
|
173
|
+
return formatAndroidSelectionResponse(devices[0].udid);
|
|
174
|
+
}
|
|
170
175
|
return formatAndroidListResponse(devices);
|
|
171
176
|
}
|
|
172
177
|
/**
|
|
173
178
|
* Handle iOS device selection
|
|
174
179
|
*/
|
|
175
180
|
async function handleIOSDeviceSelection(iosDeviceType, deviceUdid) {
|
|
181
|
+
const iosManager = IOSManager.getInstance();
|
|
182
|
+
if (!iosManager.isMac()) {
|
|
183
|
+
throw new Error('iOS testing is only available on macOS');
|
|
184
|
+
}
|
|
176
185
|
validateIOSDeviceType(iosDeviceType);
|
|
177
186
|
const devices = await getIOSDevices(iosDeviceType);
|
|
178
187
|
if (deviceUdid) {
|
|
179
188
|
const selectedDevice = selectIOSDevice(deviceUdid, devices, iosDeviceType);
|
|
180
189
|
return formatIOSSelectionResponse(selectedDevice.name, deviceUdid);
|
|
181
190
|
}
|
|
191
|
+
// Auto-select when only one device is available
|
|
192
|
+
if (devices.length === 1) {
|
|
193
|
+
const selectedDevice = selectIOSDevice(devices[0].udid, devices, iosDeviceType);
|
|
194
|
+
return formatIOSSelectionResponse(selectedDevice.name, devices[0].udid);
|
|
195
|
+
}
|
|
182
196
|
return formatIOSListResponse(devices, iosDeviceType);
|
|
183
197
|
}
|
|
184
198
|
export default function selectDevice(server) {
|
|
185
199
|
server.addTool({
|
|
186
200
|
name: 'select_device',
|
|
187
|
-
description: `
|
|
201
|
+
description: `Discover and select a device for LOCAL Appium servers ONLY.
|
|
188
202
|
DO NOT use this tool for REMOTE Appium servers - remoteServerUrl indicates a remote server.
|
|
189
203
|
WORKFLOW FOR LOCAL SERVERS:
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
204
|
+
1. ASK THE USER which platform they want (Android or iOS) - do not assume
|
|
205
|
+
2. Call this tool with the chosen platform (and iosDeviceType for iOS)
|
|
206
|
+
3. If only one device is found, it is auto-selected - proceed to create_session (or prepare_ios_simulator for iOS simulators)
|
|
207
|
+
4. If multiple devices are found, ask the user which one they want, then call this tool again with deviceUdid
|
|
208
|
+
5. After selection, proceed to create_session (or prepare_ios_simulator for iOS simulators, then create_session)
|
|
194
209
|
WORKFLOW FOR REMOTE SERVERS:
|
|
195
210
|
- SKIP this tool entirely
|
|
196
211
|
- Device selection should be handled via capabilities in create_session (e.g., appium:deviceName, appium:udid)
|
|
@@ -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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"}
|
|
@@ -7,7 +7,7 @@ export default function generateTest(server) {
|
|
|
7
7
|
`## Instructions`,
|
|
8
8
|
`- You are an Appium test generator.`,
|
|
9
9
|
`- You are given a scenario and you need to generate a appium test for it.`,
|
|
10
|
-
`- Request user to select the platform first using
|
|
10
|
+
`- Request user to select the platform first using select_device tool and create a session`,
|
|
11
11
|
`- Use generate_locators tool to fetch all interactable elements from the current screen and use it to generate the tests`,
|
|
12
12
|
`- Element can only be clicked only if it is clickable.`,
|
|
13
13
|
`- Text can entered in the element only if it is focusable`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-tests.js","sourceRoot":"","sources":["../../../src/tools/test-generation/generate-tests.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAe;IAClD,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;QAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAC7D,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,MAA2B,EAAE,EAAE,CACnD;QACE,iBAAiB;QACjB,qCAAqC;QACrC,2EAA2E;QAC3E,
|
|
1
|
+
{"version":3,"file":"generate-tests.js","sourceRoot":"","sources":["../../../src/tools/test-generation/generate-tests.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAe;IAClD,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;QAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAC7D,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,MAA2B,EAAE,EAAE,CACnD;QACE,iBAAiB;QACjB,qCAAqC;QACrC,2EAA2E;QAC3E,2FAA2F;QAC3F,0HAA0H;QAC1H,wDAAwD;QACxD,2DAA2D;QAC3D,2GAA2G;QAC3G,wEAAwE;QACxE,oHAAoH;QACpH,mFAAmF;QACnF,mDAAmD;QACnD,+EAA+E;QAC/E,kGAAkG;QAClG,QAAQ;QACR,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;KAChE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEf,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,uCAAuC;QACpD,UAAU,EAAE,kBAAkB;QAC9B,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,QAAa,EAAgB,EAAE,CAAC,CAAC;YAC1D,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,YAAY,CAAC;wBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;qBAClB,CAAC;iBACH;aACF;SACF,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
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.
|
|
6
|
+
"version": "1.51.0",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "npm",
|
|
10
10
|
"identifier": "appium-mcp",
|
|
11
|
-
"version": "1.
|
|
11
|
+
"version": "1.51.0",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
}
|
|
Binary file
|
package/src/tools/README.md
CHANGED
|
@@ -12,8 +12,7 @@ This directory contains all MCP tools available in MCP Appium.
|
|
|
12
12
|
- `shake.ts` - iOS Simulator shake via `mobile: shake` (`appium_mobile_shake`; not Android, not physical iOS)
|
|
13
13
|
- `lock.ts` - Lock device (`appium_mobile_lock`); optionally lock for N seconds (Android & iOS)
|
|
14
14
|
- `lock.ts` - Unlock device (`appium_mobile_unlock`)
|
|
15
|
-
- `select-
|
|
16
|
-
- `select-device.ts` - Choose specific device
|
|
15
|
+
- `select-device.ts` - Discover devices and select one (auto-selects if only one found)
|
|
17
16
|
- `file-transfer.ts` - Push/pull files on device (`appium_mobile_file` with `action=push|pull`)
|
|
18
17
|
- `driver-settings.ts` - Read/update Appium driver session settings (`appium_get_settings`, `appium_update_settings`)
|
|
19
18
|
|
package/src/tools/index.ts
CHANGED
|
@@ -21,7 +21,6 @@ import deleteSession from './session/delete-session.js';
|
|
|
21
21
|
import listSessions from './session/list-sessions.js';
|
|
22
22
|
import selectSession from './session/select-session.js';
|
|
23
23
|
import generateLocators from './test-generation/locators.js';
|
|
24
|
-
import selectPlatform from './session/select-platform.js';
|
|
25
24
|
import selectDevice from './session/select-device.js';
|
|
26
25
|
import openNotifications from './session/open-notifications.js';
|
|
27
26
|
import shakeDevice from './session/shake.js';
|
|
@@ -142,7 +141,6 @@ export default function registerTools(server: FastMCP): void {
|
|
|
142
141
|
};
|
|
143
142
|
|
|
144
143
|
// Session Management
|
|
145
|
-
selectPlatform(server);
|
|
146
144
|
selectDevice(server);
|
|
147
145
|
createSession(server);
|
|
148
146
|
listSessions(server);
|
|
@@ -349,7 +349,7 @@ async function prepareSimulator(
|
|
|
349
349
|
if (!simulator) {
|
|
350
350
|
result.boot = {
|
|
351
351
|
status: 'failed',
|
|
352
|
-
detail: `Simulator with UDID "${udid}" not found. Use
|
|
352
|
+
detail: `Simulator with UDID "${udid}" not found. Use select_device to get a valid UDID.`,
|
|
353
353
|
};
|
|
354
354
|
return result;
|
|
355
355
|
}
|
|
@@ -420,7 +420,7 @@ const prepareIosSimulatorSchema = z.object({
|
|
|
420
420
|
udid: z
|
|
421
421
|
.string()
|
|
422
422
|
.describe(
|
|
423
|
-
'The UDID of the iOS simulator to prepare. Use
|
|
423
|
+
'The UDID of the iOS simulator to prepare. Use select_device to get this.'
|
|
424
424
|
),
|
|
425
425
|
platform: z
|
|
426
426
|
.enum(['ios', 'tvos'])
|
|
@@ -267,12 +267,12 @@ async function createDriverSession(
|
|
|
267
267
|
*
|
|
268
268
|
* @tool create_session
|
|
269
269
|
* @description Creates a new mobile session with Android or iOS device. Requires prior
|
|
270
|
-
* platform selection via the
|
|
270
|
+
* platform selection via the select_device tool. Supports both local and remote
|
|
271
271
|
* Appium server connections.
|
|
272
272
|
*
|
|
273
273
|
* @param {Object} args - Tool execution arguments
|
|
274
274
|
* @param {'ios' | 'android'} args.platform - REQUIRED. The target platform, must match
|
|
275
|
-
* the platform explicitly selected via
|
|
275
|
+
* the platform explicitly selected via select_device tool
|
|
276
276
|
* @param {Object} [args.capabilities] - Optional custom W3C format capabilities
|
|
277
277
|
* @param {string} [args.remoteServerUrl] - Optional remote Appium server URL
|
|
278
278
|
* (e.g., http://localhost:4723). If not provided, uses local Appium server
|
|
@@ -292,12 +292,12 @@ export default function createSession(server: any): void {
|
|
|
292
292
|
name: 'create_session',
|
|
293
293
|
description: `Create a new Appium session with Android, iOS or any device/driver Appium supports.
|
|
294
294
|
WORKFLOW FOR LOCAL SERVERS (no remoteServerUrl):
|
|
295
|
-
- Use
|
|
296
|
-
- Then
|
|
297
|
-
-
|
|
295
|
+
- Use select_device tool FIRST to discover devices and let the user choose platform and device
|
|
296
|
+
- Then call create_session with the selected platform
|
|
297
|
+
- For iOS simulators, call prepare_ios_simulator before create_session
|
|
298
298
|
- DO NOT assume or default to any platform
|
|
299
299
|
WORKFLOW FOR REMOTE SERVERS (remoteServerUrl provided):
|
|
300
|
-
- SKIP
|
|
300
|
+
- SKIP select_device tool entirely
|
|
301
301
|
- Infer the platform from the user's request (e.g., 'ios', 'android', or 'general')
|
|
302
302
|
- If platform is 'general', treat the provided capabilities as a pass-through W3C/Appium capability set (useful for non-Android/iOS drivers like Windows, macOS, or custom drivers)
|
|
303
303
|
- Infer device type from context when possible (e.g., 'simulator', 'real device')
|
|
@@ -307,7 +307,7 @@ export default function createSession(server: any): void {
|
|
|
307
307
|
parameters: z.object({
|
|
308
308
|
platform: z.enum(['ios', 'android', 'general']).describe(
|
|
309
309
|
`REQUIRED: Platform to use.
|
|
310
|
-
- For local servers, this must match the platform the user explicitly selected via the
|
|
310
|
+
- For local servers, this must match the platform the user explicitly selected via the select_device tool ('ios' or 'android').
|
|
311
311
|
- Use 'general' when you want the tool to treat capabilities as a pass-through Appium/W3C capability set (recommended for non-Android/iOS drivers such as Windows, macOS, or other custom Appium servers). 'general' will not apply any platform-specific defaults.
|
|
312
312
|
- If remoteServerUrl is provided, the assistant should confirm or infer the platform from the conversation; do not assume a default.`
|
|
313
313
|
),
|
|
@@ -244,6 +244,12 @@ async function handleAndroidDeviceSelection(deviceUdid?: string): Promise<any> {
|
|
|
244
244
|
return formatAndroidSelectionResponse(deviceUdid);
|
|
245
245
|
}
|
|
246
246
|
|
|
247
|
+
// Auto-select when only one device is available
|
|
248
|
+
if (devices.length === 1) {
|
|
249
|
+
selectAndroidDevice(devices[0].udid, devices);
|
|
250
|
+
return formatAndroidSelectionResponse(devices[0].udid);
|
|
251
|
+
}
|
|
252
|
+
|
|
247
253
|
return formatAndroidListResponse(devices);
|
|
248
254
|
}
|
|
249
255
|
|
|
@@ -254,6 +260,11 @@ async function handleIOSDeviceSelection(
|
|
|
254
260
|
iosDeviceType: 'simulator' | 'real' | undefined,
|
|
255
261
|
deviceUdid?: string
|
|
256
262
|
): Promise<any> {
|
|
263
|
+
const iosManager = IOSManager.getInstance();
|
|
264
|
+
if (!iosManager.isMac()) {
|
|
265
|
+
throw new Error('iOS testing is only available on macOS');
|
|
266
|
+
}
|
|
267
|
+
|
|
257
268
|
validateIOSDeviceType(iosDeviceType);
|
|
258
269
|
|
|
259
270
|
const devices = await getIOSDevices(iosDeviceType!);
|
|
@@ -263,19 +274,30 @@ async function handleIOSDeviceSelection(
|
|
|
263
274
|
return formatIOSSelectionResponse(selectedDevice.name, deviceUdid);
|
|
264
275
|
}
|
|
265
276
|
|
|
277
|
+
// Auto-select when only one device is available
|
|
278
|
+
if (devices.length === 1) {
|
|
279
|
+
const selectedDevice = selectIOSDevice(
|
|
280
|
+
devices[0].udid,
|
|
281
|
+
devices,
|
|
282
|
+
iosDeviceType!
|
|
283
|
+
);
|
|
284
|
+
return formatIOSSelectionResponse(selectedDevice.name, devices[0].udid);
|
|
285
|
+
}
|
|
286
|
+
|
|
266
287
|
return formatIOSListResponse(devices, iosDeviceType!);
|
|
267
288
|
}
|
|
268
289
|
|
|
269
290
|
export default function selectDevice(server: any): void {
|
|
270
291
|
server.addTool({
|
|
271
292
|
name: 'select_device',
|
|
272
|
-
description: `
|
|
293
|
+
description: `Discover and select a device for LOCAL Appium servers ONLY.
|
|
273
294
|
DO NOT use this tool for REMOTE Appium servers - remoteServerUrl indicates a remote server.
|
|
274
295
|
WORKFLOW FOR LOCAL SERVERS:
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
296
|
+
1. ASK THE USER which platform they want (Android or iOS) - do not assume
|
|
297
|
+
2. Call this tool with the chosen platform (and iosDeviceType for iOS)
|
|
298
|
+
3. If only one device is found, it is auto-selected - proceed to create_session (or prepare_ios_simulator for iOS simulators)
|
|
299
|
+
4. If multiple devices are found, ask the user which one they want, then call this tool again with deviceUdid
|
|
300
|
+
5. After selection, proceed to create_session (or prepare_ios_simulator for iOS simulators, then create_session)
|
|
279
301
|
WORKFLOW FOR REMOTE SERVERS:
|
|
280
302
|
- SKIP this tool entirely
|
|
281
303
|
- Device selection should be handled via capabilities in create_session (e.g., appium:deviceName, appium:udid)
|
|
@@ -11,7 +11,7 @@ export default function generateTest(server: FastMCP): void {
|
|
|
11
11
|
`## Instructions`,
|
|
12
12
|
`- You are an Appium test generator.`,
|
|
13
13
|
`- You are given a scenario and you need to generate a appium test for it.`,
|
|
14
|
-
`- Request user to select the platform first using
|
|
14
|
+
`- Request user to select the platform first using select_device tool and create a session`,
|
|
15
15
|
`- Use generate_locators tool to fetch all interactable elements from the current screen and use it to generate the tests`,
|
|
16
16
|
`- Element can only be clicked only if it is clickable.`,
|
|
17
17
|
`- Text can entered in the element only if it is focusable`,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"select-platform.d.ts","sourceRoot":"","sources":["../../../src/tools/session/select-platform.ts"],"names":[],"mappings":"AAkMA,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAuDxD"}
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool to select mobile platform before creating a session
|
|
3
|
-
*/
|
|
4
|
-
import { ADBManager } from '../../devicemanager/adb-manager.js';
|
|
5
|
-
import { IOSManager } from '../../devicemanager/ios-manager.js';
|
|
6
|
-
import { z } from 'zod';
|
|
7
|
-
import log from '../../logger.js';
|
|
8
|
-
/**
|
|
9
|
-
* Get and validate Android devices
|
|
10
|
-
*/
|
|
11
|
-
async function getAndroidDevices() {
|
|
12
|
-
const adb = await ADBManager.getInstance().initialize();
|
|
13
|
-
const devices = await adb.getConnectedDevices();
|
|
14
|
-
if (devices.length === 0) {
|
|
15
|
-
throw new Error('No Android devices/emulators found');
|
|
16
|
-
}
|
|
17
|
-
return devices;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Format multiple Android devices response
|
|
21
|
-
*/
|
|
22
|
-
function formatMultipleAndroidDevicesResponse(devices) {
|
|
23
|
-
const deviceList = devices
|
|
24
|
-
.map((device, index) => ` ${index + 1}. ${device.udid}`)
|
|
25
|
-
.join('\n');
|
|
26
|
-
return {
|
|
27
|
-
content: [
|
|
28
|
-
{
|
|
29
|
-
type: 'text',
|
|
30
|
-
text: `✅ Android platform selected\n\n⚠️ Multiple Android devices/emulators found (${devices.length}):\n${deviceList}\n\n🚨 IMPORTANT: You MUST use the select_device tool next to ask the user which device they want to use.\n\nDO NOT proceed to create_session until the user has selected a specific device using the select_device tool.`,
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Format single Android device response
|
|
37
|
-
*/
|
|
38
|
-
function formatSingleAndroidDeviceResponse(deviceUdid) {
|
|
39
|
-
const platformInfo = `Android platform selected (Found device: ${deviceUdid})`;
|
|
40
|
-
const nextSteps = `Found 1 Android device: ${deviceUdid}\n\n` +
|
|
41
|
-
"You can now create an Android session using the create_session tool with platform='android'. Make sure you have:\n" +
|
|
42
|
-
'• Android SDK installed\n' +
|
|
43
|
-
'• Android device connected or emulator running\n' +
|
|
44
|
-
'• USB debugging enabled (for real devices)';
|
|
45
|
-
return {
|
|
46
|
-
content: [
|
|
47
|
-
{
|
|
48
|
-
type: 'text',
|
|
49
|
-
text: `✅ ${platformInfo}\n\n📋 Next Steps:\n${nextSteps}\n\n🚀 Ready to create a session? Use the create_session tool with platform='android'`,
|
|
50
|
-
},
|
|
51
|
-
],
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Validate macOS for iOS testing
|
|
56
|
-
*/
|
|
57
|
-
function validateMacOSForIOS() {
|
|
58
|
-
const iosManager = IOSManager.getInstance();
|
|
59
|
-
if (!iosManager.isMac()) {
|
|
60
|
-
throw new Error('iOS testing is only available on macOS');
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Format iOS device type selection prompt
|
|
65
|
-
*/
|
|
66
|
-
function formatIOSDeviceTypePrompt() {
|
|
67
|
-
return {
|
|
68
|
-
content: [
|
|
69
|
-
{
|
|
70
|
-
type: 'text',
|
|
71
|
-
text: `✅ iOS platform selected\n\n📱 Please specify the device type:\n\n⚠️ IMPORTANT: You MUST call select_platform again with the iosDeviceType parameter.\n\nOptions:\n1. 'simulator' - Use iOS Simulator\n2. 'real' - Use real iOS device\n\n🚀 Call select_platform with:\n• platform='ios'\n• iosDeviceType='simulator' OR iosDeviceType='real'`,
|
|
72
|
-
},
|
|
73
|
-
],
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Get and validate iOS devices by type
|
|
78
|
-
*/
|
|
79
|
-
async function getIOSDevices(iosDeviceType) {
|
|
80
|
-
const iosManager = IOSManager.getInstance();
|
|
81
|
-
const devices = await iosManager.getDevicesByType(iosDeviceType);
|
|
82
|
-
if (devices.length === 0) {
|
|
83
|
-
const deviceTypeText = iosDeviceType === 'simulator' ? 'simulators' : 'real devices';
|
|
84
|
-
const helpText = iosDeviceType === 'simulator'
|
|
85
|
-
? 'Please start an iOS simulator using Xcode or use "xcrun simctl boot <SIMULATOR_UDID>"'
|
|
86
|
-
: 'Please connect an iOS device via USB and ensure it is trusted';
|
|
87
|
-
throw new Error(`No iOS ${deviceTypeText} found. ${helpText}`);
|
|
88
|
-
}
|
|
89
|
-
return devices;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Format multiple iOS devices response
|
|
93
|
-
*/
|
|
94
|
-
function formatMultipleIOSDevicesResponse(devices, iosDeviceType) {
|
|
95
|
-
const deviceList = devices
|
|
96
|
-
.map((device, index) => ` ${index + 1}. ${device.name} (${device.udid})${device.state ? ` - ${device.state}` : ''}`)
|
|
97
|
-
.join('\n');
|
|
98
|
-
const deviceTypeText = iosDeviceType === 'simulator' ? 'simulators' : 'devices';
|
|
99
|
-
return {
|
|
100
|
-
content: [
|
|
101
|
-
{
|
|
102
|
-
type: 'text',
|
|
103
|
-
text: `✅ iOS platform selected (${iosDeviceType})\n\n⚠️ Multiple iOS ${deviceTypeText} found (${devices.length}):\n${deviceList}\n\n🚨 IMPORTANT: You MUST use the select_device tool next to ask the user which device they want to use.\n\nDO NOT proceed to create_session until the user has selected a specific device using the select_device tool.`,
|
|
104
|
-
},
|
|
105
|
-
],
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Format single iOS device response
|
|
110
|
-
*/
|
|
111
|
-
function formatSingleIOSDeviceResponse(device, iosDeviceType) {
|
|
112
|
-
const platformInfo = `iOS ${iosDeviceType} selected (Found device: ${device.name} - ${device.udid})`;
|
|
113
|
-
const nextSteps = `Found 1 iOS ${iosDeviceType}: ${device.name} (${device.udid})\n\n` +
|
|
114
|
-
"You can now create an iOS session using the create_session tool with platform='ios'. Make sure you have:\n" +
|
|
115
|
-
'• Xcode installed (macOS only)\n' +
|
|
116
|
-
(iosDeviceType === 'simulator'
|
|
117
|
-
? '• iOS simulator running\n'
|
|
118
|
-
: '• iOS device connected via USB\n• Developer certificates configured\n• Device trusted on your Mac\n');
|
|
119
|
-
return {
|
|
120
|
-
content: [
|
|
121
|
-
{
|
|
122
|
-
type: 'text',
|
|
123
|
-
text: `✅ ${platformInfo}\n\n📋 Next Steps:\n${nextSteps}\n\n🚀 Ready to create a session? Use the create_session tool with platform='ios'`,
|
|
124
|
-
},
|
|
125
|
-
],
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Handle Android platform selection
|
|
130
|
-
*/
|
|
131
|
-
async function handleAndroidPlatformSelection() {
|
|
132
|
-
const devices = await getAndroidDevices();
|
|
133
|
-
if (devices.length > 1) {
|
|
134
|
-
return formatMultipleAndroidDevicesResponse(devices);
|
|
135
|
-
}
|
|
136
|
-
return formatSingleAndroidDeviceResponse(devices[0].udid);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Handle iOS platform selection
|
|
140
|
-
*/
|
|
141
|
-
async function handleIOSPlatformSelection(iosDeviceType) {
|
|
142
|
-
validateMacOSForIOS();
|
|
143
|
-
if (!iosDeviceType) {
|
|
144
|
-
return formatIOSDeviceTypePrompt();
|
|
145
|
-
}
|
|
146
|
-
const devices = await getIOSDevices(iosDeviceType);
|
|
147
|
-
if (devices.length > 1) {
|
|
148
|
-
return formatMultipleIOSDevicesResponse(devices, iosDeviceType);
|
|
149
|
-
}
|
|
150
|
-
return formatSingleIOSDeviceResponse(devices[0], iosDeviceType);
|
|
151
|
-
}
|
|
152
|
-
export default function selectPlatform(server) {
|
|
153
|
-
server.addTool({
|
|
154
|
-
name: 'select_platform',
|
|
155
|
-
description: `Select the mobile platform for LOCAL Appium servers ONLY.
|
|
156
|
-
DO NOT use this tool if the user mentions a REMOTE Appium server URL (e.g., http://localhost:4723, http://192.168.1.100:4723, or any other server address).
|
|
157
|
-
WORKFLOW FOR LOCAL SERVERS:
|
|
158
|
-
1. First, ASK THE USER which mobile platform they want to use (Android or iOS)
|
|
159
|
-
2. You MUST explicitly prompt the user to choose between Android or iOS
|
|
160
|
-
3. DO NOT assume or default to any platform
|
|
161
|
-
4. After platform selection, available devices will be listed
|
|
162
|
-
5. If multiple devices are available, use select_device to let the user choose
|
|
163
|
-
6. After device selection, proceed to create_session
|
|
164
|
-
WORKFLOW FOR REMOTE SERVERS:
|
|
165
|
-
If user provides a remote server URL, SKIP this tool entirely. Instead, infer the platform and device type from the user's request (e.g., 'ios xcuitest driver with iphone 17 simulator' means platform='ios') and call create_session directly with the remoteServerUrl parameter.
|
|
166
|
-
`,
|
|
167
|
-
parameters: z.object({
|
|
168
|
-
platform: z
|
|
169
|
-
.enum(['ios', 'android'])
|
|
170
|
-
.describe("REQUIRED: The platform chosen by the user - 'android' for Android devices/emulators or 'ios' for iOS devices/simulators. This must be based on the user's explicit choice, NOT a default assumption."),
|
|
171
|
-
iosDeviceType: z
|
|
172
|
-
.enum(['simulator', 'real'])
|
|
173
|
-
.optional()
|
|
174
|
-
.describe("For iOS only: Specify whether to use 'simulator' (iOS Simulator on macOS) or 'real' (physical iOS device). REQUIRED when platform is 'ios'."),
|
|
175
|
-
}),
|
|
176
|
-
annotations: {
|
|
177
|
-
readOnlyHint: false,
|
|
178
|
-
openWorldHint: false,
|
|
179
|
-
},
|
|
180
|
-
execute: async (args, _context) => {
|
|
181
|
-
try {
|
|
182
|
-
const { platform, iosDeviceType } = args;
|
|
183
|
-
if (platform === 'android') {
|
|
184
|
-
log.info('Platform selected: ANDROID');
|
|
185
|
-
return await handleAndroidPlatformSelection();
|
|
186
|
-
}
|
|
187
|
-
else if (platform === 'ios') {
|
|
188
|
-
log.info('Platform selected: IOS');
|
|
189
|
-
return await handleIOSPlatformSelection(iosDeviceType);
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
throw new Error(`Invalid platform: ${platform}. Please choose 'android' or 'ios'.`);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
catch (error) {
|
|
196
|
-
log.error(`[select_platform] ${error?.stack || error?.message || String(error)}`);
|
|
197
|
-
throw new Error(`Failed to select platform: ${error.message}`);
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
//# sourceMappingURL=select-platform.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"select-platform.js","sourceRoot":"","sources":["../../../src/tools/session/select-platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool to select mobile platform before creating a session
|
|
3
|
-
*/
|
|
4
|
-
import { ADBManager } from '../../devicemanager/adb-manager.js';
|
|
5
|
-
import { IOSManager } from '../../devicemanager/ios-manager.js';
|
|
6
|
-
import { z } from 'zod';
|
|
7
|
-
import log from '../../logger.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Get and validate Android devices
|
|
11
|
-
*/
|
|
12
|
-
async function getAndroidDevices(): Promise<any[]> {
|
|
13
|
-
const adb = await ADBManager.getInstance().initialize();
|
|
14
|
-
const devices = await adb.getConnectedDevices();
|
|
15
|
-
|
|
16
|
-
if (devices.length === 0) {
|
|
17
|
-
throw new Error('No Android devices/emulators found');
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
return devices;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Format multiple Android devices response
|
|
25
|
-
*/
|
|
26
|
-
function formatMultipleAndroidDevicesResponse(devices: any[]): any {
|
|
27
|
-
const deviceList = devices
|
|
28
|
-
.map((device, index) => ` ${index + 1}. ${device.udid}`)
|
|
29
|
-
.join('\n');
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
content: [
|
|
33
|
-
{
|
|
34
|
-
type: 'text',
|
|
35
|
-
text: `✅ Android platform selected\n\n⚠️ Multiple Android devices/emulators found (${devices.length}):\n${deviceList}\n\n🚨 IMPORTANT: You MUST use the select_device tool next to ask the user which device they want to use.\n\nDO NOT proceed to create_session until the user has selected a specific device using the select_device tool.`,
|
|
36
|
-
},
|
|
37
|
-
],
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Format single Android device response
|
|
43
|
-
*/
|
|
44
|
-
function formatSingleAndroidDeviceResponse(deviceUdid: string): any {
|
|
45
|
-
const platformInfo = `Android platform selected (Found device: ${deviceUdid})`;
|
|
46
|
-
const nextSteps =
|
|
47
|
-
`Found 1 Android device: ${deviceUdid}\n\n` +
|
|
48
|
-
"You can now create an Android session using the create_session tool with platform='android'. Make sure you have:\n" +
|
|
49
|
-
'• Android SDK installed\n' +
|
|
50
|
-
'• Android device connected or emulator running\n' +
|
|
51
|
-
'• USB debugging enabled (for real devices)';
|
|
52
|
-
|
|
53
|
-
return {
|
|
54
|
-
content: [
|
|
55
|
-
{
|
|
56
|
-
type: 'text',
|
|
57
|
-
text: `✅ ${platformInfo}\n\n📋 Next Steps:\n${nextSteps}\n\n🚀 Ready to create a session? Use the create_session tool with platform='android'`,
|
|
58
|
-
},
|
|
59
|
-
],
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Validate macOS for iOS testing
|
|
65
|
-
*/
|
|
66
|
-
function validateMacOSForIOS(): void {
|
|
67
|
-
const iosManager = IOSManager.getInstance();
|
|
68
|
-
if (!iosManager.isMac()) {
|
|
69
|
-
throw new Error('iOS testing is only available on macOS');
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Format iOS device type selection prompt
|
|
75
|
-
*/
|
|
76
|
-
function formatIOSDeviceTypePrompt(): any {
|
|
77
|
-
return {
|
|
78
|
-
content: [
|
|
79
|
-
{
|
|
80
|
-
type: 'text',
|
|
81
|
-
text: `✅ iOS platform selected\n\n📱 Please specify the device type:\n\n⚠️ IMPORTANT: You MUST call select_platform again with the iosDeviceType parameter.\n\nOptions:\n1. 'simulator' - Use iOS Simulator\n2. 'real' - Use real iOS device\n\n🚀 Call select_platform with:\n• platform='ios'\n• iosDeviceType='simulator' OR iosDeviceType='real'`,
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Get and validate iOS devices by type
|
|
89
|
-
*/
|
|
90
|
-
async function getIOSDevices(
|
|
91
|
-
iosDeviceType: 'simulator' | 'real'
|
|
92
|
-
): Promise<any[]> {
|
|
93
|
-
const iosManager = IOSManager.getInstance();
|
|
94
|
-
const devices = await iosManager.getDevicesByType(iosDeviceType);
|
|
95
|
-
|
|
96
|
-
if (devices.length === 0) {
|
|
97
|
-
const deviceTypeText =
|
|
98
|
-
iosDeviceType === 'simulator' ? 'simulators' : 'real devices';
|
|
99
|
-
const helpText =
|
|
100
|
-
iosDeviceType === 'simulator'
|
|
101
|
-
? 'Please start an iOS simulator using Xcode or use "xcrun simctl boot <SIMULATOR_UDID>"'
|
|
102
|
-
: 'Please connect an iOS device via USB and ensure it is trusted';
|
|
103
|
-
throw new Error(`No iOS ${deviceTypeText} found. ${helpText}`);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return devices;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Format multiple iOS devices response
|
|
111
|
-
*/
|
|
112
|
-
function formatMultipleIOSDevicesResponse(
|
|
113
|
-
devices: any[],
|
|
114
|
-
iosDeviceType: 'simulator' | 'real'
|
|
115
|
-
): any {
|
|
116
|
-
const deviceList = devices
|
|
117
|
-
.map(
|
|
118
|
-
(device, index) =>
|
|
119
|
-
` ${index + 1}. ${device.name} (${device.udid})${device.state ? ` - ${device.state}` : ''}`
|
|
120
|
-
)
|
|
121
|
-
.join('\n');
|
|
122
|
-
const deviceTypeText =
|
|
123
|
-
iosDeviceType === 'simulator' ? 'simulators' : 'devices';
|
|
124
|
-
|
|
125
|
-
return {
|
|
126
|
-
content: [
|
|
127
|
-
{
|
|
128
|
-
type: 'text',
|
|
129
|
-
text: `✅ iOS platform selected (${iosDeviceType})\n\n⚠️ Multiple iOS ${deviceTypeText} found (${devices.length}):\n${deviceList}\n\n🚨 IMPORTANT: You MUST use the select_device tool next to ask the user which device they want to use.\n\nDO NOT proceed to create_session until the user has selected a specific device using the select_device tool.`,
|
|
130
|
-
},
|
|
131
|
-
],
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Format single iOS device response
|
|
137
|
-
*/
|
|
138
|
-
function formatSingleIOSDeviceResponse(
|
|
139
|
-
device: any,
|
|
140
|
-
iosDeviceType: 'simulator' | 'real'
|
|
141
|
-
): any {
|
|
142
|
-
const platformInfo = `iOS ${iosDeviceType} selected (Found device: ${device.name} - ${device.udid})`;
|
|
143
|
-
const nextSteps =
|
|
144
|
-
`Found 1 iOS ${iosDeviceType}: ${device.name} (${device.udid})\n\n` +
|
|
145
|
-
"You can now create an iOS session using the create_session tool with platform='ios'. Make sure you have:\n" +
|
|
146
|
-
'• Xcode installed (macOS only)\n' +
|
|
147
|
-
(iosDeviceType === 'simulator'
|
|
148
|
-
? '• iOS simulator running\n'
|
|
149
|
-
: '• iOS device connected via USB\n• Developer certificates configured\n• Device trusted on your Mac\n');
|
|
150
|
-
|
|
151
|
-
return {
|
|
152
|
-
content: [
|
|
153
|
-
{
|
|
154
|
-
type: 'text',
|
|
155
|
-
text: `✅ ${platformInfo}\n\n📋 Next Steps:\n${nextSteps}\n\n🚀 Ready to create a session? Use the create_session tool with platform='ios'`,
|
|
156
|
-
},
|
|
157
|
-
],
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Handle Android platform selection
|
|
163
|
-
*/
|
|
164
|
-
async function handleAndroidPlatformSelection(): Promise<any> {
|
|
165
|
-
const devices = await getAndroidDevices();
|
|
166
|
-
|
|
167
|
-
if (devices.length > 1) {
|
|
168
|
-
return formatMultipleAndroidDevicesResponse(devices);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return formatSingleAndroidDeviceResponse(devices[0].udid);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Handle iOS platform selection
|
|
176
|
-
*/
|
|
177
|
-
async function handleIOSPlatformSelection(
|
|
178
|
-
iosDeviceType?: 'simulator' | 'real'
|
|
179
|
-
): Promise<any> {
|
|
180
|
-
validateMacOSForIOS();
|
|
181
|
-
|
|
182
|
-
if (!iosDeviceType) {
|
|
183
|
-
return formatIOSDeviceTypePrompt();
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
const devices = await getIOSDevices(iosDeviceType);
|
|
187
|
-
|
|
188
|
-
if (devices.length > 1) {
|
|
189
|
-
return formatMultipleIOSDevicesResponse(devices, iosDeviceType);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
return formatSingleIOSDeviceResponse(devices[0], iosDeviceType);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
export default function selectPlatform(server: any): void {
|
|
196
|
-
server.addTool({
|
|
197
|
-
name: 'select_platform',
|
|
198
|
-
description: `Select the mobile platform for LOCAL Appium servers ONLY.
|
|
199
|
-
DO NOT use this tool if the user mentions a REMOTE Appium server URL (e.g., http://localhost:4723, http://192.168.1.100:4723, or any other server address).
|
|
200
|
-
WORKFLOW FOR LOCAL SERVERS:
|
|
201
|
-
1. First, ASK THE USER which mobile platform they want to use (Android or iOS)
|
|
202
|
-
2. You MUST explicitly prompt the user to choose between Android or iOS
|
|
203
|
-
3. DO NOT assume or default to any platform
|
|
204
|
-
4. After platform selection, available devices will be listed
|
|
205
|
-
5. If multiple devices are available, use select_device to let the user choose
|
|
206
|
-
6. After device selection, proceed to create_session
|
|
207
|
-
WORKFLOW FOR REMOTE SERVERS:
|
|
208
|
-
If user provides a remote server URL, SKIP this tool entirely. Instead, infer the platform and device type from the user's request (e.g., 'ios xcuitest driver with iphone 17 simulator' means platform='ios') and call create_session directly with the remoteServerUrl parameter.
|
|
209
|
-
`,
|
|
210
|
-
parameters: z.object({
|
|
211
|
-
platform: z
|
|
212
|
-
.enum(['ios', 'android'])
|
|
213
|
-
.describe(
|
|
214
|
-
"REQUIRED: The platform chosen by the user - 'android' for Android devices/emulators or 'ios' for iOS devices/simulators. This must be based on the user's explicit choice, NOT a default assumption."
|
|
215
|
-
),
|
|
216
|
-
iosDeviceType: z
|
|
217
|
-
.enum(['simulator', 'real'])
|
|
218
|
-
.optional()
|
|
219
|
-
.describe(
|
|
220
|
-
"For iOS only: Specify whether to use 'simulator' (iOS Simulator on macOS) or 'real' (physical iOS device). REQUIRED when platform is 'ios'."
|
|
221
|
-
),
|
|
222
|
-
}),
|
|
223
|
-
annotations: {
|
|
224
|
-
readOnlyHint: false,
|
|
225
|
-
openWorldHint: false,
|
|
226
|
-
},
|
|
227
|
-
execute: async (args: any, _context: any): Promise<any> => {
|
|
228
|
-
try {
|
|
229
|
-
const { platform, iosDeviceType } = args;
|
|
230
|
-
|
|
231
|
-
if (platform === 'android') {
|
|
232
|
-
log.info('Platform selected: ANDROID');
|
|
233
|
-
return await handleAndroidPlatformSelection();
|
|
234
|
-
} else if (platform === 'ios') {
|
|
235
|
-
log.info('Platform selected: IOS');
|
|
236
|
-
return await handleIOSPlatformSelection(iosDeviceType);
|
|
237
|
-
} else {
|
|
238
|
-
throw new Error(
|
|
239
|
-
`Invalid platform: ${platform}. Please choose 'android' or 'ios'.`
|
|
240
|
-
);
|
|
241
|
-
}
|
|
242
|
-
} catch (error: any) {
|
|
243
|
-
log.error(
|
|
244
|
-
`[select_platform] ${error?.stack || error?.message || String(error)}`
|
|
245
|
-
);
|
|
246
|
-
throw new Error(`Failed to select platform: ${error.message}`);
|
|
247
|
-
}
|
|
248
|
-
},
|
|
249
|
-
});
|
|
250
|
-
}
|