appium-mcp 1.6.1 → 1.7.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/dist/tools/app-management/list-apps.js +5 -1
- package/dist/tools/app-management/list-apps.js.map +1 -1
- package/dist/tools/context/get-contexts.js +5 -1
- package/dist/tools/context/get-contexts.js.map +1 -1
- package/dist/tools/interactions/get-page-source.js +5 -1
- package/dist/tools/interactions/get-page-source.js.map +1 -1
- package/dist/tools/interactions/screenshot.js +5 -1
- package/dist/tools/interactions/screenshot.js.map +1 -1
- package/dist/tools/session/create-session.js +18 -3
- package/dist/tools/session/create-session.js.map +1 -1
- package/dist/tools/session/select-device.js +9 -2
- package/dist/tools/session/select-device.js.map +1 -1
- package/dist/tools/test-generation/locators.js +5 -1
- package/dist/tools/test-generation/locators.js.map +1 -1
- package/dist/ui/mcp-ui-utils.d.ts +111 -0
- package/dist/ui/mcp-ui-utils.js +1542 -0
- package/dist/ui/mcp-ui-utils.js.map +1 -0
- package/package.json +5 -5
- package/src/tools/app-management/list-apps.ts +14 -1
- package/src/tools/context/get-contexts.ts +14 -1
- package/src/tools/interactions/get-page-source.ts +14 -1
- package/src/tools/interactions/screenshot.ts +14 -1
- package/src/tools/session/create-session.ts +29 -3
- package/src/tools/session/select-device.ts +23 -2
- package/src/tools/test-generation/locators.ts +15 -1
- package/src/ui/mcp-ui-utils.ts +1630 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [1.7.0](https://github.com/appium/appium-mcp/compare/v1.6.1...v1.7.0) (2026-01-05)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* Add interactive UI experiences to mcp ([#75](https://github.com/appium/appium-mcp/issues/75)) ([b0b49c7](https://github.com/appium/appium-mcp/commit/b0b49c7deec5eebaca7ac50060844cedcbf1d8b5))
|
|
6
|
+
|
|
1
7
|
## [1.6.1](https://github.com/appium/appium-mcp/compare/v1.6.0...v1.6.1) (2026-01-05)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { getDriver, getPlatformName } from '../../session-store.js';
|
|
3
|
+
import { createUIResource, createAppListUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
|
|
3
4
|
async function listAppsFromDevice() {
|
|
4
5
|
const driver = await getDriver();
|
|
5
6
|
if (!driver) {
|
|
@@ -34,7 +35,7 @@ export default function listApps(server) {
|
|
|
34
35
|
execute: async () => {
|
|
35
36
|
try {
|
|
36
37
|
const apps = await listAppsFromDevice();
|
|
37
|
-
|
|
38
|
+
const textResponse = {
|
|
38
39
|
content: [
|
|
39
40
|
{
|
|
40
41
|
type: 'text',
|
|
@@ -42,6 +43,9 @@ export default function listApps(server) {
|
|
|
42
43
|
},
|
|
43
44
|
],
|
|
44
45
|
};
|
|
46
|
+
// Add interactive app list UI
|
|
47
|
+
const uiResource = createUIResource(`ui://appium-mcp/app-list/${Date.now()}`, createAppListUI(apps));
|
|
48
|
+
return addUIResourceToResponse(textResponse, uiResource);
|
|
45
49
|
}
|
|
46
50
|
catch (err) {
|
|
47
51
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-apps.js","sourceRoot":"","sources":["../../../src/tools/app-management/list-apps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"list-apps.js","sourceRoot":"","sources":["../../../src/tools/app-management/list-apps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,KAAK,UAAU,kBAAkB;IAC/B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QAC3C,OAAO;QACP,KAAK;QACL,SAAS;QACT,MAAM;QACN,UAAU;KACX,CAAC,CAAC;IAEH,MAAM,IAAI,GAAU,WAAW;SAC5B,KAAK,CAAC,UAAU,CAAC;SACjB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAChB,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE;QACrB,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC,CAAC;IAEN,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,MAAe;IAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAE5B,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,wCAAwC;QACrD,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,EAAE,CAAC;gBACxC,MAAM,YAAY,GAAG;oBACnB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;yBACzD;qBACF;iBACF,CAAC;gBAEF,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,gBAAgB,CACjC,4BAA4B,IAAI,CAAC,GAAG,EAAE,EAAE,EACxC,eAAe,CAAC,IAAI,CAAC,CACtB,CAAC;gBAEF,OAAO,uBAAuB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,6BAA6B,GAAG,CAAC,QAAQ,EAAE,EAAE;yBACpD;qBACF;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { getDriver } from '../../session-store.js';
|
|
3
|
+
import { createUIResource, createContextSwitcherUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
|
|
3
4
|
export default function getContexts(server) {
|
|
4
5
|
server.addTool({
|
|
5
6
|
name: 'appium_get_contexts',
|
|
@@ -29,7 +30,7 @@ export default function getContexts(server) {
|
|
|
29
30
|
],
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
+
const textResponse = {
|
|
33
34
|
content: [
|
|
34
35
|
{
|
|
35
36
|
type: 'text',
|
|
@@ -37,6 +38,9 @@ export default function getContexts(server) {
|
|
|
37
38
|
},
|
|
38
39
|
],
|
|
39
40
|
};
|
|
41
|
+
// Add interactive context switcher UI
|
|
42
|
+
const uiResource = createUIResource(`ui://appium-mcp/context-switcher/${Date.now()}`, createContextSwitcherUI(contexts, currentContext));
|
|
43
|
+
return addUIResourceToResponse(textResponse, uiResource);
|
|
40
44
|
}
|
|
41
45
|
catch (err) {
|
|
42
46
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-contexts.js","sourceRoot":"","sources":["../../../src/tools/context/get-contexts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"get-contexts.js","sourceRoot":"","sources":["../../../src/tools/context/get-contexts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,MAAe;IACjD,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,oLAAoL;QACtL,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,OAAY,EAAgB,EAAE;YACvD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACnD,MAAM,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;oBAC5C,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;iBACrC,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvC,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,wBAAwB;6BAC/B;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,MAAM,YAAY,GAAG;oBACnB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,uBAAuB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,sBAAsB,cAAc,IAAI,KAAK,EAAE;yBAC9G;qBACF;iBACF,CAAC;gBAEF,sCAAsC;gBACtC,MAAM,UAAU,GAAG,gBAAgB,CACjC,oCAAoC,IAAI,CAAC,GAAG,EAAE,EAAE,EAChD,uBAAuB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAClD,CAAC;gBAEF,OAAO,uBAAuB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,kCAAkC,GAAG,CAAC,QAAQ,EAAE,EAAE;yBACzD;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { getDriver } from '../../session-store.js';
|
|
3
|
+
import { createUIResource, createPageSourceInspectorUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
|
|
3
4
|
export default function getPageSource(server) {
|
|
4
5
|
server.addTool({
|
|
5
6
|
name: 'appium_get_page_source',
|
|
@@ -19,7 +20,7 @@ export default function getPageSource(server) {
|
|
|
19
20
|
if (!pageSource) {
|
|
20
21
|
throw new Error('Page source is empty or null');
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
+
const textResponse = {
|
|
23
24
|
content: [
|
|
24
25
|
{
|
|
25
26
|
type: 'text',
|
|
@@ -30,6 +31,9 @@ export default function getPageSource(server) {
|
|
|
30
31
|
},
|
|
31
32
|
],
|
|
32
33
|
};
|
|
34
|
+
// Add interactive page source inspector UI
|
|
35
|
+
const uiResource = createUIResource(`ui://appium-mcp/page-source-inspector/${Date.now()}`, createPageSourceInspectorUI(pageSource));
|
|
36
|
+
return addUIResourceToResponse(textResponse, uiResource);
|
|
33
37
|
}
|
|
34
38
|
catch (err) {
|
|
35
39
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-page-source.js","sourceRoot":"","sources":["../../../src/tools/interactions/get-page-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"get-page-source.js","sourceRoot":"","sources":["../../../src/tools/interactions/get-page-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,MAAe;IACnD,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,mDAAmD;QAChE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,OAAY,EAAgB,EAAE;YACvD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;gBAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAClD,CAAC;gBAED,MAAM,YAAY,GAAG;oBACnB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EACF,wCAAwC;gCACxC,SAAS;gCACT,UAAU;gCACV,KAAK;yBACR;qBACF;iBACF,CAAC;gBAEF,2CAA2C;gBAC3C,MAAM,UAAU,GAAG,gBAAgB,CACjC,yCAAyC,IAAI,CAAC,GAAG,EAAE,EAAE,EACrD,2BAA2B,CAAC,UAAU,CAAC,CACxC,CAAC;gBAEF,OAAO,uBAAuB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,qCAAqC,GAAG,CAAC,QAAQ,EAAE,EAAE;yBAC5D;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getDriver } from '../../session-store.js';
|
|
2
2
|
import { writeFile, mkdir } from 'fs/promises';
|
|
3
3
|
import { join, isAbsolute } from 'path';
|
|
4
|
+
import { createUIResource, createScreenshotViewerUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
|
|
4
5
|
/**
|
|
5
6
|
* Resolves the screenshot directory path.
|
|
6
7
|
* - If SCREENSHOTS_DIR is not set, returns process.cwd()
|
|
@@ -42,7 +43,7 @@ export async function executeScreenshot(deps = defaultDeps) {
|
|
|
42
43
|
const filepath = join(screenshotDir, filename);
|
|
43
44
|
// Save screenshot to disk
|
|
44
45
|
await deps.writeFile(filepath, screenshotBuffer);
|
|
45
|
-
|
|
46
|
+
const textResponse = {
|
|
46
47
|
content: [
|
|
47
48
|
{
|
|
48
49
|
type: 'text',
|
|
@@ -50,6 +51,9 @@ export async function executeScreenshot(deps = defaultDeps) {
|
|
|
50
51
|
},
|
|
51
52
|
],
|
|
52
53
|
};
|
|
54
|
+
// Add interactive screenshot viewer UI
|
|
55
|
+
const uiResource = createUIResource(`ui://appium-mcp/screenshot-viewer/${Date.now()}`, createScreenshotViewerUI(screenshotBase64, filepath));
|
|
56
|
+
return addUIResourceToResponse(textResponse, uiResource);
|
|
53
57
|
}
|
|
54
58
|
catch (err) {
|
|
55
59
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/interactions/screenshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/interactions/screenshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ import { setSession, hasActiveSession, safeDeleteSession, } from '../../session-
|
|
|
10
10
|
import { getSelectedDevice, getSelectedDeviceType, getSelectedDeviceInfo, clearSelectedDevice, } from './select-device.js';
|
|
11
11
|
import { IOSManager } from '../../devicemanager/ios-manager.js';
|
|
12
12
|
import log from '../../logger.js';
|
|
13
|
+
import { createUIResource, createSessionDashboardUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
|
|
13
14
|
/**
|
|
14
15
|
* Load capabilities configuration from file if specified in environment
|
|
15
16
|
*/
|
|
@@ -173,15 +174,29 @@ export default function createSession(server) {
|
|
|
173
174
|
log.info(`Creating new ${platform.toUpperCase()} session with capabilities:`, JSON.stringify(finalCapabilities, null, 2));
|
|
174
175
|
const sessionId = await createDriverSession(driver, finalCapabilities);
|
|
175
176
|
setSession(driver, sessionId);
|
|
176
|
-
|
|
177
|
-
|
|
177
|
+
// Safely convert sessionId to string for display
|
|
178
|
+
const sessionIdStr = typeof sessionId === 'string'
|
|
179
|
+
? sessionId
|
|
180
|
+
: String(sessionId || 'Unknown');
|
|
181
|
+
log.info(`${platform.toUpperCase()} session created successfully with ID: ${sessionIdStr}`);
|
|
182
|
+
const textResponse = {
|
|
178
183
|
content: [
|
|
179
184
|
{
|
|
180
185
|
type: 'text',
|
|
181
|
-
text: `${platform.toUpperCase()} session created successfully with ID: ${
|
|
186
|
+
text: `${platform.toUpperCase()} session created successfully with ID: ${sessionIdStr}\nPlatform: ${finalCapabilities.platformName}\nAutomation: ${finalCapabilities['appium:automationName']}\nDevice: ${finalCapabilities['appium:deviceName']}`,
|
|
182
187
|
},
|
|
183
188
|
],
|
|
184
189
|
};
|
|
190
|
+
// Add interactive session dashboard UI
|
|
191
|
+
const uiResource = createUIResource(`ui://appium-mcp/session-dashboard/${sessionIdStr}`, createSessionDashboardUI({
|
|
192
|
+
sessionId: sessionIdStr,
|
|
193
|
+
platform: finalCapabilities.platformName,
|
|
194
|
+
automationName: finalCapabilities['appium:automationName'],
|
|
195
|
+
deviceName: finalCapabilities['appium:deviceName'],
|
|
196
|
+
platformVersion: finalCapabilities['appium:platformVersion'],
|
|
197
|
+
udid: finalCapabilities['appium:udid'],
|
|
198
|
+
}));
|
|
199
|
+
return addUIResourceToResponse(textResponse, uiResource);
|
|
185
200
|
}
|
|
186
201
|
catch (error) {
|
|
187
202
|
log.error('Error creating session:', error);
|
|
@@ -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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"}
|
|
@@ -5,6 +5,7 @@ import { ADBManager } from '../../devicemanager/adb-manager.js';
|
|
|
5
5
|
import { IOSManager } from '../../devicemanager/ios-manager.js';
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
import log from '../../logger.js';
|
|
8
|
+
import { createUIResource, createDevicePickerUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
|
|
8
9
|
// Store selected device globally
|
|
9
10
|
let selectedDeviceUdid = null;
|
|
10
11
|
let selectedDeviceType = null;
|
|
@@ -72,7 +73,7 @@ function formatAndroidListResponse(devices) {
|
|
|
72
73
|
const deviceList = devices
|
|
73
74
|
.map((device, index) => ` ${index + 1}. ${device.udid}`)
|
|
74
75
|
.join('\n');
|
|
75
|
-
|
|
76
|
+
const textResponse = {
|
|
76
77
|
content: [
|
|
77
78
|
{
|
|
78
79
|
type: 'text',
|
|
@@ -80,6 +81,9 @@ function formatAndroidListResponse(devices) {
|
|
|
80
81
|
},
|
|
81
82
|
],
|
|
82
83
|
};
|
|
84
|
+
// Add interactive UI picker
|
|
85
|
+
const uiResource = createUIResource(`ui://appium-mcp/device-picker/android-${Date.now()}`, createDevicePickerUI(devices, 'android'));
|
|
86
|
+
return addUIResourceToResponse(textResponse, uiResource);
|
|
83
87
|
}
|
|
84
88
|
/**
|
|
85
89
|
* Validate iOS device type
|
|
@@ -142,7 +146,7 @@ function formatIOSListResponse(devices, iosDeviceType) {
|
|
|
142
146
|
const deviceList = devices
|
|
143
147
|
.map((device, index) => ` ${index + 1}. ${device.name} (${device.udid})${device.state ? ` - ${device.state}` : ''}`)
|
|
144
148
|
.join('\n');
|
|
145
|
-
|
|
149
|
+
const textResponse = {
|
|
146
150
|
content: [
|
|
147
151
|
{
|
|
148
152
|
type: 'text',
|
|
@@ -150,6 +154,9 @@ function formatIOSListResponse(devices, iosDeviceType) {
|
|
|
150
154
|
},
|
|
151
155
|
],
|
|
152
156
|
};
|
|
157
|
+
// Add interactive UI picker
|
|
158
|
+
const uiResource = createUIResource(`ui://appium-mcp/device-picker/ios-${iosDeviceType}-${Date.now()}`, createDevicePickerUI(devices, 'ios', iosDeviceType));
|
|
159
|
+
return addUIResourceToResponse(textResponse, uiResource);
|
|
153
160
|
}
|
|
154
161
|
/**
|
|
155
162
|
* Handle Android device selection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-device.js","sourceRoot":"","sources":["../../../src/tools/session/select-device.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAElC,iCAAiC;AACjC,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAC7C,IAAI,kBAAkB,GAAgC,IAAI,CAAC;AAC3D,IAAI,kBAAkB,GAAQ,IAAI,CAAC;AAEnC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,kBAAkB,GAAG,IAAI,CAAC;IAC1B,kBAAkB,GAAG,IAAI,CAAC;IAC1B,kBAAkB,GAAG,IAAI,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB;IAC9B,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAEhD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,UAAkB,EAAE,OAAc;IAC7D,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAChE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,qBAAqB,UAAU,mCAAmC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxG,CAAC;IACJ,CAAC;IAED,kBAAkB,GAAG,UAAU,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,8BAA8B,CAAC,UAAkB;IACxD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,OAAO,EAAE,sBAAsB,UAAU,EAAE;oBAC3C,YAAY,EACV,qEAAqE;oBACvE,QAAQ,EAAE,SAAS;oBACnB,YAAY,EAAE;wBACZ,aAAa,EAAE,UAAU;qBAC1B;iBACF,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,OAAc;IAC/C,MAAM,UAAU,GAAG,OAAO;SACvB,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;SACxD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,
|
|
1
|
+
{"version":3,"file":"select-device.js","sourceRoot":"","sources":["../../../src/tools/session/select-device.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import { z } from 'zod';
|
|
13
13
|
import { getDriver } from '../../session-store.js';
|
|
14
14
|
import { generateAllElementLocators } from '../../locators/generate-all-locators.js';
|
|
15
|
+
import { createUIResource, createLocatorGeneratorUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
|
|
15
16
|
export default function generateLocators(server) {
|
|
16
17
|
server.addTool({
|
|
17
18
|
name: 'generate_locators',
|
|
@@ -41,7 +42,7 @@ export default function generateLocators(server) {
|
|
|
41
42
|
const interactableElements = generateAllElementLocators(sampleXML, true, driverName, {
|
|
42
43
|
fetchableOnly: true,
|
|
43
44
|
});
|
|
44
|
-
|
|
45
|
+
const textResponse = {
|
|
45
46
|
content: [
|
|
46
47
|
{
|
|
47
48
|
type: 'text',
|
|
@@ -54,6 +55,9 @@ export default function generateLocators(server) {
|
|
|
54
55
|
},
|
|
55
56
|
],
|
|
56
57
|
};
|
|
58
|
+
// Add interactive locator generator UI
|
|
59
|
+
const uiResource = createUIResource(`ui://appium-mcp/locator-generator/${Date.now()}`, createLocatorGeneratorUI(interactableElements));
|
|
60
|
+
return addUIResourceToResponse(textResponse, uiResource);
|
|
57
61
|
}
|
|
58
62
|
catch (parseError) {
|
|
59
63
|
log.error('Error parsing XML:', parseError);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locators.js","sourceRoot":"","sources":["../../../src/tools/test-generation/locators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"locators.js","sourceRoot":"","sources":["../../../src/tools/test-generation/locators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAErF,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,MAAW;IAClD,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,yCAAyC;QACtD,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE,GAAG,EAAO,EAAgB,EAAE;YACvD,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAChC,IAAI,CAAC;gBACH,kCAAkC;gBAElC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;gBACJ,CAAC;gBAED,IAAI,CAAC;oBACH,sCAAsC;oBACtC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;oBAChD,MAAM,UAAU,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;oBACpE,IAAI,CAAC,UAAU,EAAE,CAAC;wBAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;oBAClD,CAAC;oBACD,MAAM,SAAS,GAAG,UAAU,CAAC;oBAC7B,MAAM,WAAW,GAAG,0BAA0B,CAC5C,SAAS,EACT,IAAI,EACJ,UAAU,CACX,CAAC;oBACF,MAAM,oBAAoB,GAAG,0BAA0B,CACrD,SAAS,EACT,IAAI,EACJ,UAAU,EACV;wBACE,aAAa,EAAE,IAAI;qBACpB,CACF,CAAC;oBAEF,MAAM,YAAY,GAAG;wBACnB,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oCACnB,oBAAoB;oCACpB,OAAO,EAAE,oCAAoC;oCAC7C,WAAW,EAAE;4FAC6D;iCAC3E,CAAC;6BACH;yBACF;qBACF,CAAC;oBAEF,uCAAuC;oBACvC,MAAM,UAAU,GAAG,gBAAgB,CACjC,qCAAqC,IAAI,CAAC,GAAG,EAAE,EAAE,EACjD,wBAAwB,CAAC,oBAAoB,CAAC,CAC/C,CAAC;oBAEF,OAAO,uBAAuB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;gBAC3D,CAAC;gBAAC,OAAO,UAAe,EAAE,CAAC;oBACzB,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;oBAC5C,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,GAAG,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP-UI Utility Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for creating UI resources using MCP-UI protocol.
|
|
5
|
+
* It enables interactive UI components to be returned alongside text responses.
|
|
6
|
+
*
|
|
7
|
+
* Reference: https://mcpui.dev/guide/introduction
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Creates a UIResource object following MCP-UI protocol
|
|
11
|
+
* @param uri - Unique identifier using ui:// scheme (e.g., 'ui://appium-mcp/device-picker')
|
|
12
|
+
* @param htmlContent - HTML string to render in the iframe
|
|
13
|
+
* @returns UIResource object ready to be included in MCP response content
|
|
14
|
+
*/
|
|
15
|
+
export declare function createUIResource(uri: string, htmlContent: string): {
|
|
16
|
+
type: 'resource';
|
|
17
|
+
resource: {
|
|
18
|
+
uri: string;
|
|
19
|
+
mimeType: 'text/html';
|
|
20
|
+
text: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Creates a device picker UI component
|
|
25
|
+
* @param devices - Array of device objects with name, udid, state, etc.
|
|
26
|
+
* @param platform - 'android' or 'ios'
|
|
27
|
+
* @param deviceType - 'simulator' or 'real' for iOS
|
|
28
|
+
* @returns HTML string for device picker UI
|
|
29
|
+
*/
|
|
30
|
+
export declare function createDevicePickerUI(devices: Array<{
|
|
31
|
+
name?: string;
|
|
32
|
+
udid: string;
|
|
33
|
+
state?: string;
|
|
34
|
+
type?: string;
|
|
35
|
+
}>, platform: 'android' | 'ios', deviceType?: 'simulator' | 'real'): string;
|
|
36
|
+
/**
|
|
37
|
+
* Creates a screenshot viewer UI component
|
|
38
|
+
* @param screenshotBase64 - Base64 encoded PNG image
|
|
39
|
+
* @param filepath - Path where screenshot was saved
|
|
40
|
+
* @returns HTML string for screenshot viewer
|
|
41
|
+
*/
|
|
42
|
+
export declare function createScreenshotViewerUI(screenshotBase64: string, filepath: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Creates a session dashboard UI component
|
|
45
|
+
* @param sessionInfo - Session information object
|
|
46
|
+
* @returns HTML string for session dashboard
|
|
47
|
+
*/
|
|
48
|
+
export declare function createSessionDashboardUI(sessionInfo: {
|
|
49
|
+
sessionId: string | any;
|
|
50
|
+
platform: string;
|
|
51
|
+
automationName: string;
|
|
52
|
+
deviceName?: string;
|
|
53
|
+
platformVersion?: string;
|
|
54
|
+
udid?: string;
|
|
55
|
+
}): string;
|
|
56
|
+
/**
|
|
57
|
+
* Creates a locator generator UI component
|
|
58
|
+
* @param locators - Array of elements with locators
|
|
59
|
+
* @returns HTML string for locator generator UI
|
|
60
|
+
*/
|
|
61
|
+
export declare function createLocatorGeneratorUI(locators: Array<{
|
|
62
|
+
tagName: string;
|
|
63
|
+
locators: Record<string, string>;
|
|
64
|
+
text: string;
|
|
65
|
+
contentDesc: string;
|
|
66
|
+
resourceId: string;
|
|
67
|
+
clickable: boolean;
|
|
68
|
+
enabled: boolean;
|
|
69
|
+
displayed: boolean;
|
|
70
|
+
}>): string;
|
|
71
|
+
/**
|
|
72
|
+
* Creates a page source inspector UI component
|
|
73
|
+
* @param pageSource - XML page source string
|
|
74
|
+
* @returns HTML string for page source inspector
|
|
75
|
+
*/
|
|
76
|
+
export declare function createPageSourceInspectorUI(pageSource: string): string;
|
|
77
|
+
/**
|
|
78
|
+
* Creates a context switcher UI component
|
|
79
|
+
* @param contexts - Array of context names
|
|
80
|
+
* @param currentContext - Currently active context name
|
|
81
|
+
* @returns HTML string for context switcher
|
|
82
|
+
*/
|
|
83
|
+
export declare function createContextSwitcherUI(contexts: string[], currentContext: string | null): string;
|
|
84
|
+
/**
|
|
85
|
+
* Creates an app list UI component
|
|
86
|
+
* @param apps - Array of app objects with packageName and appName
|
|
87
|
+
* @returns HTML string for app list
|
|
88
|
+
*/
|
|
89
|
+
export declare function createAppListUI(apps: Array<{
|
|
90
|
+
packageName: string;
|
|
91
|
+
appName?: string;
|
|
92
|
+
}>): string;
|
|
93
|
+
/**
|
|
94
|
+
* Creates a test code viewer UI component
|
|
95
|
+
* @param code - Generated test code string
|
|
96
|
+
* @param language - Code language (java, javascript, etc.)
|
|
97
|
+
* @returns HTML string for test code viewer
|
|
98
|
+
*/
|
|
99
|
+
export declare function createTestCodeViewerUI(code: string, language?: string): string;
|
|
100
|
+
/**
|
|
101
|
+
* Helper function to add UI resource to response content
|
|
102
|
+
* Returns both text and UI resource for backward compatibility
|
|
103
|
+
*/
|
|
104
|
+
export declare function addUIResourceToResponse(response: {
|
|
105
|
+
content: Array<{
|
|
106
|
+
type: string;
|
|
107
|
+
text?: string;
|
|
108
|
+
}>;
|
|
109
|
+
}, uiResource: ReturnType<typeof createUIResource>): {
|
|
110
|
+
content: Array<any>;
|
|
111
|
+
};
|