appium-mcp 1.65.0 → 1.66.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/gestures/handlers/tap.d.ts.map +1 -1
- package/dist/tools/gestures/handlers/tap.js +5 -5
- package/dist/tools/gestures/handlers/tap.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +33 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/interactions/active-element.d.ts.map +1 -1
- package/dist/tools/interactions/active-element.js +3 -4
- package/dist/tools/interactions/active-element.js.map +1 -1
- package/dist/tools/interactions/find.d.ts.map +1 -1
- package/dist/tools/interactions/find.js +9 -5
- package/dist/tools/interactions/find.js.map +1 -1
- package/dist/tools/interactions/get-element-attribute.js +4 -3
- package/dist/tools/interactions/get-element-attribute.js.map +1 -1
- package/dist/tools/interactions/get-text.d.ts.map +1 -1
- package/dist/tools/interactions/get-text.js +2 -2
- package/dist/tools/interactions/get-text.js.map +1 -1
- package/dist/tools/interactions/set-value.d.ts.map +1 -1
- package/dist/tools/interactions/set-value.js +7 -3
- package/dist/tools/interactions/set-value.js.map +1 -1
- package/dist/tools/session/create-session.js +2 -2
- package/dist/tools/session/create-session.js.map +1 -1
- package/dist/tools/tool-response.d.ts +11 -2
- package/dist/tools/tool-response.d.ts.map +1 -1
- package/dist/tools/tool-response.js +29 -2
- package/dist/tools/tool-response.js.map +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/resources/submodules.zip +0 -0
- package/src/tools/gestures/handlers/tap.ts +14 -7
- package/src/tools/index.ts +44 -5
- package/src/tools/interactions/active-element.ts +6 -6
- package/src/tools/interactions/find.ts +12 -6
- package/src/tools/interactions/get-element-attribute.ts +4 -4
- package/src/tools/interactions/get-text.ts +4 -3
- package/src/tools/interactions/set-value.ts +7 -4
- package/src/tools/session/create-session.ts +3 -3
- package/src/tools/tool-response.ts +36 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [1.66.0](https://github.com/appium/appium-mcp/compare/v1.65.0...v1.66.0) (2026-04-23)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* **tools:** structured logs, toolErrorMessage, canonical elementId line ([#282](https://github.com/appium/appium-mcp/issues/282)) ([4f73519](https://github.com/appium/appium-mcp/commit/4f73519315b4dea1850633db80701ef80113407c))
|
|
6
|
+
|
|
1
7
|
## [1.65.0](https://github.com/appium/appium-mcp/compare/v1.64.0...v1.65.0) (2026-04-23)
|
|
2
8
|
|
|
3
9
|
### Features
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/tap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/tap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAchE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAkDhD,wBAAsB,SAAS,CAC7B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CAiCxB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CAmDxB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CA6DxB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getPlatformName, PLATFORM } from '../../../session-store.js';
|
|
2
2
|
import { elementClick, execute, getElementRect, performActions, } from '../../../command.js';
|
|
3
|
-
import { errorResult, textResult, toolErrorMessage, } from '../../tool-response.js';
|
|
3
|
+
import { errorResult, textResult, textResultWithPrimaryElementId, toolErrorMessage, } from '../../tool-response.js';
|
|
4
4
|
const AI_ELEMENT_PREFIX = 'ai-element:';
|
|
5
5
|
function parseAiElementCoords(uuid) {
|
|
6
6
|
const parts = uuid.split(':');
|
|
@@ -49,10 +49,10 @@ export async function handleTap(driver, args) {
|
|
|
49
49
|
return errorResult(parsed.error);
|
|
50
50
|
}
|
|
51
51
|
await performActions(driver, w3cTapAt(parsed.x, parsed.y));
|
|
52
|
-
return
|
|
52
|
+
return textResultWithPrimaryElementId(args.elementUUID, `Successfully tapped at AI element coordinates (${parsed.x}, ${parsed.y}).`);
|
|
53
53
|
}
|
|
54
54
|
await elementClick(driver, args.elementUUID);
|
|
55
|
-
return
|
|
55
|
+
return textResultWithPrimaryElementId(args.elementUUID, `Successfully tapped element ${args.elementUUID}.`);
|
|
56
56
|
}
|
|
57
57
|
if (args.x === undefined || args.y === undefined) {
|
|
58
58
|
return errorResult('tap requires either elementUUID, or both x and y coordinates.');
|
|
@@ -74,7 +74,7 @@ export async function handleDoubleTap(driver, args) {
|
|
|
74
74
|
await execute(driver, 'mobile: doubleTap', {
|
|
75
75
|
elementId: args.elementUUID,
|
|
76
76
|
});
|
|
77
|
-
return
|
|
77
|
+
return textResultWithPrimaryElementId(args.elementUUID, `Successfully double tapped element ${args.elementUUID}.`);
|
|
78
78
|
}
|
|
79
79
|
const coords = await resolveCoordsFromElement(driver, args.elementUUID);
|
|
80
80
|
x = coords.x;
|
|
@@ -126,7 +126,7 @@ export async function handleLongPress(driver, args) {
|
|
|
126
126
|
elementId: args.elementUUID,
|
|
127
127
|
duration: duration / 1000,
|
|
128
128
|
});
|
|
129
|
-
return
|
|
129
|
+
return textResultWithPrimaryElementId(args.elementUUID, `Successfully long pressed element ${args.elementUUID} for ${duration}ms.`);
|
|
130
130
|
}
|
|
131
131
|
catch {
|
|
132
132
|
// fall through to W3C Actions fallback
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap.js","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/tap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tap.js","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/tap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,SAAS,CAAC;AA6DtD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA0I3D"}
|
package/dist/tools/index.js
CHANGED
|
@@ -31,6 +31,24 @@ import screenRecording from './interactions/screen-recording.js';
|
|
|
31
31
|
import app from './app-management/app.js';
|
|
32
32
|
import mobilePermissions from './app-management/permissions.js';
|
|
33
33
|
import context from './context/context.js';
|
|
34
|
+
function sessionIdFromToolArgs(args) {
|
|
35
|
+
if (args &&
|
|
36
|
+
typeof args === 'object' &&
|
|
37
|
+
'sessionId' in args &&
|
|
38
|
+
typeof args.sessionId === 'string') {
|
|
39
|
+
return args.sessionId;
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
function isErrorFromToolResult(result) {
|
|
44
|
+
if (result &&
|
|
45
|
+
typeof result === 'object' &&
|
|
46
|
+
'content' in result &&
|
|
47
|
+
Array.isArray(result.content)) {
|
|
48
|
+
return result.isError === true;
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
34
52
|
export default function registerTools(server) {
|
|
35
53
|
// Wrap addTool to inject logging around tool execution
|
|
36
54
|
const originalAddTool = server.addTool.bind(server);
|
|
@@ -83,14 +101,25 @@ export default function registerTools(server) {
|
|
|
83
101
|
log.info(`[TOOL START] ${toolName}`, redactArgs(args));
|
|
84
102
|
try {
|
|
85
103
|
const result = await originalExecute(args, context);
|
|
86
|
-
const
|
|
87
|
-
log.info(
|
|
104
|
+
const durationMs = Date.now() - start;
|
|
105
|
+
log.info(JSON.stringify({
|
|
106
|
+
tool: toolName,
|
|
107
|
+
durationMs,
|
|
108
|
+
sessionId: sessionIdFromToolArgs(args),
|
|
109
|
+
isError: isErrorFromToolResult(result),
|
|
110
|
+
}));
|
|
88
111
|
return result;
|
|
89
112
|
}
|
|
90
113
|
catch (err) {
|
|
91
|
-
const
|
|
114
|
+
const durationMs = Date.now() - start;
|
|
115
|
+
log.info(JSON.stringify({
|
|
116
|
+
tool: toolName,
|
|
117
|
+
durationMs,
|
|
118
|
+
sessionId: sessionIdFromToolArgs(args),
|
|
119
|
+
isError: true,
|
|
120
|
+
}));
|
|
92
121
|
const msg = err instanceof Error ? err.stack || err.message : String(err);
|
|
93
|
-
log.error(`[TOOL ERROR] ${toolName} (${
|
|
122
|
+
log.error(`[TOOL ERROR] ${toolName} (${durationMs}ms): ${msg}`);
|
|
94
123
|
throw err;
|
|
95
124
|
}
|
|
96
125
|
},
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"active-element.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/active-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"active-element.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/active-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,SAAS,CAAC;AAWtD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA6C9D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { getActiveElement as _getActiveElement } from '../../command.js';
|
|
3
|
-
import { resolveDriver,
|
|
3
|
+
import { resolveDriver, textResultWithPrimaryElementId, errorResult, toolErrorMessage, readWebElementId, } from '../tool-response.js';
|
|
4
4
|
export default function getActiveElement(server) {
|
|
5
5
|
const schema = z.object({
|
|
6
6
|
sessionId: z
|
|
@@ -24,12 +24,11 @@ export default function getActiveElement(server) {
|
|
|
24
24
|
const { driver } = resolved;
|
|
25
25
|
try {
|
|
26
26
|
const element = await _getActiveElement(driver);
|
|
27
|
-
const elementId = element
|
|
28
|
-
element.ELEMENT;
|
|
27
|
+
const elementId = readWebElementId(element);
|
|
29
28
|
if (!elementId) {
|
|
30
29
|
throw new Error('Active element was returned without a valid element ID');
|
|
31
30
|
}
|
|
32
|
-
return
|
|
31
|
+
return textResultWithPrimaryElementId(elementId, 'Successfully found an active element.');
|
|
33
32
|
}
|
|
34
33
|
catch (err) {
|
|
35
34
|
return errorResult(`Failed to find an active element. err: ${toolErrorMessage(err)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"active-element.js","sourceRoot":"","sources":["../../../src/tools/interactions/active-element.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"active-element.js","sourceRoot":"","sources":["../../../src/tools/interactions/active-element.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EACL,aAAa,EACb,8BAA8B,EAC9B,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,MAAe;IACtD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;KAC1E,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,8KAA8K;QAChL,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EAAE,IAA4B,EAA0B,EAAE;YACtE,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,QAAQ,CAAC,MAAM,CAAC;YACzB,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;YAE5B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAChD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAE5C,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CACb,wDAAwD,CACzD,CAAC;gBACJ,CAAC;gBAED,OAAO,8BAA8B,CACnC,SAAS,EACT,uCAAuC,CACxC,CAAC;YACJ,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,OAAO,WAAW,CAChB,0CAA0C,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAClE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/find.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/find.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;iBA+B5B,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA+GzD"}
|
|
@@ -3,7 +3,7 @@ import { getScreenshot } from '../../command.js';
|
|
|
3
3
|
import { imageUtil } from '@appium/support';
|
|
4
4
|
import { AIVisionFinder } from '../../ai-finder/vision-finder.js';
|
|
5
5
|
import log from '../../logger.js';
|
|
6
|
-
import { resolveDriver,
|
|
6
|
+
import { resolveDriver, textResultWithPrimaryElementId, errorResult, toolErrorMessage, readWebElementId, } from '../tool-response.js';
|
|
7
7
|
// Module-level singleton: ensures the LRU cache persists across tool calls.
|
|
8
8
|
// Creating a new AIVisionFinder() on every call would reset the cache each time.
|
|
9
9
|
let _finderInstance = null;
|
|
@@ -79,7 +79,11 @@ export default function findElement(server) {
|
|
|
79
79
|
throw new Error('selector is required for traditional locator strategies');
|
|
80
80
|
}
|
|
81
81
|
const element = await driver.findElement(args.strategy, args.selector);
|
|
82
|
-
|
|
82
|
+
const elementId = readWebElementId(element);
|
|
83
|
+
if (!elementId) {
|
|
84
|
+
throw new Error('Element was returned without a valid element ID');
|
|
85
|
+
}
|
|
86
|
+
return textResultWithPrimaryElementId(elementId, `Successfully found element ${args.selector} with strategy ${args.strategy}.`);
|
|
83
87
|
}
|
|
84
88
|
// Route 2: AI vision-based finding
|
|
85
89
|
if (!args.ai_instruction) {
|
|
@@ -104,11 +108,11 @@ export default function findElement(server) {
|
|
|
104
108
|
// Format: "ai-element:{x},{y}:{bbox}"
|
|
105
109
|
const elementUUID = `ai-element:${result.center.x},${result.center.y}:${result.bbox.join(',')}`;
|
|
106
110
|
// Step 5: Build response text with optional annotated image path
|
|
107
|
-
let
|
|
111
|
+
let detail = `Successfully found "${result.target}" at coordinates (${result.center.x}, ${result.center.y}) using AI vision.`;
|
|
108
112
|
if (result.annotatedImagePath) {
|
|
109
|
-
|
|
113
|
+
detail += ` Vision image: ${result.annotatedImagePath}`;
|
|
110
114
|
}
|
|
111
|
-
return
|
|
115
|
+
return textResultWithPrimaryElementId(elementUUID, detail);
|
|
112
116
|
}
|
|
113
117
|
catch (err) {
|
|
114
118
|
const errorMessage = toolErrorMessage(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/tools/interactions/find.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAClC,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/tools/interactions/find.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { elementUUIDScheme } from '../../schema.js';
|
|
3
3
|
import { getElementAttribute } from '../../command.js';
|
|
4
|
-
import { resolveDriver,
|
|
4
|
+
import { resolveDriver, textResultWithPrimaryElementId, errorResult, toolErrorMessage, } from '../tool-response.js';
|
|
5
5
|
export default function getElementAttributeTool(server) {
|
|
6
6
|
const schema = z.object({
|
|
7
7
|
elementUUID: elementUUIDScheme,
|
|
@@ -29,9 +29,10 @@ export default function getElementAttributeTool(server) {
|
|
|
29
29
|
const { driver } = resolved;
|
|
30
30
|
try {
|
|
31
31
|
const value = await getElementAttribute(driver, args.elementUUID, args.attribute);
|
|
32
|
-
|
|
32
|
+
const detail = value !== null
|
|
33
33
|
? `Attribute "${args.attribute}" of element ${args.elementUUID}: ${value}`
|
|
34
|
-
: `Attribute "${args.attribute}" is not set on element ${args.elementUUID}
|
|
34
|
+
: `Attribute "${args.attribute}" is not set on element ${args.elementUUID}`;
|
|
35
|
+
return textResultWithPrimaryElementId(args.elementUUID, detail);
|
|
35
36
|
}
|
|
36
37
|
catch (err) {
|
|
37
38
|
return errorResult(`Failed to get attribute "${args.attribute}" from element ${args.elementUUID}. err: ${toolErrorMessage(err)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-element-attribute.js","sourceRoot":"","sources":["../../../src/tools/interactions/get-element-attribute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"get-element-attribute.js","sourceRoot":"","sources":["../../../src/tools/interactions/get-element-attribute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,aAAa,EACb,8BAA8B,EAC9B,WAAW,EACX,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,MAAe;IAC7D,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,WAAW,EAAE,iBAAiB;QAC9B,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,CACP,2OAA2O,CAC5O;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;KAC1E,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,8BAA8B;QACpC,WAAW,EACT,+MAA+M;QACjN,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EACZ,IAA4B,EAC5B,QAA6C,EACrB,EAAE;YAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,QAAQ,CAAC,MAAM,CAAC;YACzB,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;YAE5B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,mBAAmB,CACrC,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,SAAS,CACf,CAAC;gBACF,MAAM,MAAM,GACV,KAAK,KAAK,IAAI;oBACZ,CAAC,CAAC,cAAc,IAAI,CAAC,SAAS,gBAAgB,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;oBAC1E,CAAC,CAAC,cAAc,IAAI,CAAC,SAAS,2BAA2B,IAAI,CAAC,WAAW,EAAE,CAAC;gBAChF,OAAO,8BAA8B,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAClE,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,OAAO,WAAW,CAChB,4BAA4B,IAAI,CAAC,SAAS,kBAAkB,IAAI,CAAC,WAAW,UAAU,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAC9G,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-text.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/get-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,SAAS,CAAC;AAWtD,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"get-text.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/get-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,SAAS,CAAC;AAWtD,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAwCrD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { elementUUIDScheme } from '../../schema.js';
|
|
3
3
|
import { getElementText } from '../../command.js';
|
|
4
|
-
import { resolveDriver,
|
|
4
|
+
import { resolveDriver, textResultWithPrimaryElementId, errorResult, toolErrorMessage, } from '../tool-response.js';
|
|
5
5
|
export default function getText(server) {
|
|
6
6
|
const getTextSchema = z.object({
|
|
7
7
|
elementUUID: elementUUIDScheme,
|
|
@@ -26,7 +26,7 @@ export default function getText(server) {
|
|
|
26
26
|
const { driver } = resolved;
|
|
27
27
|
try {
|
|
28
28
|
const text = await getElementText(driver, args.elementUUID);
|
|
29
|
-
return
|
|
29
|
+
return textResultWithPrimaryElementId(args.elementUUID, `Successfully got text ${text} from element ${args.elementUUID}.`);
|
|
30
30
|
}
|
|
31
31
|
catch (err) {
|
|
32
32
|
return errorResult(`Failed to get text from element ${args.elementUUID}. err: ${toolErrorMessage(err)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-text.js","sourceRoot":"","sources":["../../../src/tools/interactions/get-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"get-text.js","sourceRoot":"","sources":["../../../src/tools/interactions/get-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,aAAa,EACb,8BAA8B,EAC9B,WAAW,EACX,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,MAAe;IAC7C,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;QAC7B,WAAW,EAAE,iBAAiB;QAC9B,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;KAC1E,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,0BAA0B;QACvC,UAAU,EAAE,aAAa;QACzB,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EACZ,IAAmC,EACnC,QAA6C,EACrB,EAAE;YAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,QAAQ,CAAC,MAAM,CAAC;YACzB,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;YAE5B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC5D,OAAO,8BAA8B,CACnC,IAAI,CAAC,WAAW,EAChB,yBAAyB,IAAI,iBAAiB,IAAI,CAAC,WAAW,GAAG,CAClE,CAAC;YACJ,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,OAAO,WAAW,CAChB,mCAAmC,IAAI,CAAC,WAAW,UAAU,gBAAgB,CAAC,GAAG,CAAC,EAAE,CACrF,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-value.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/set-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"set-value.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/set-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,SAAS,CAAC;AAYtD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA2DtD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { elementUUIDScheme } from '../../schema.js';
|
|
3
3
|
import { setValue as _setValue } from '../../command.js';
|
|
4
|
-
import { resolveDriver, textResult, errorResult, toolErrorMessage, } from '../tool-response.js';
|
|
4
|
+
import { resolveDriver, textResult, textResultWithPrimaryElementId, errorResult, toolErrorMessage, } from '../tool-response.js';
|
|
5
5
|
export default function setValue(server) {
|
|
6
6
|
const setValueSchema = z
|
|
7
7
|
.object({
|
|
@@ -37,10 +37,14 @@ export default function setValue(server) {
|
|
|
37
37
|
const { driver } = resolved;
|
|
38
38
|
try {
|
|
39
39
|
await _setValue(driver, args.elementUUID ?? '', args.text, args.w3cActions);
|
|
40
|
-
|
|
40
|
+
const detail = `Successfully set value ${args.text} into element ${args.elementUUID ?? '(focus)'}${args.w3cActions ? ' via W3C Actions' : ''}.`;
|
|
41
|
+
if (args.elementUUID) {
|
|
42
|
+
return textResultWithPrimaryElementId(args.elementUUID, detail);
|
|
43
|
+
}
|
|
44
|
+
return textResult(detail);
|
|
41
45
|
}
|
|
42
46
|
catch (err) {
|
|
43
|
-
return errorResult(`Failed to set value ${args.text} into element ${args.elementUUID}. err: ${toolErrorMessage(err)}`);
|
|
47
|
+
return errorResult(`Failed to set value ${args.text} into element ${args.elementUUID ?? '(focus)'}. err: ${toolErrorMessage(err)}`);
|
|
44
48
|
}
|
|
45
49
|
},
|
|
46
50
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-value.js","sourceRoot":"","sources":["../../../src/tools/interactions/set-value.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,MAAe;IAC9C,MAAM,cAAc,GAAG,CAAC;SACrB,MAAM,CAAC;QACN,WAAW,EAAE,iBAAiB,CAAC,QAAQ,EAAE;QACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC9C,UAAU,EAAE,CAAC;aACV,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,2EAA2E;YACzE,4EAA4E;YAC5E,yEAAyE,CAC5E;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;KAC1E,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,EAAE;QACnE,OAAO,EAAE,qDAAqD;KAC/D,CAAC,CAAC;IAEL,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,4BAA4B;QACzC,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EACZ,IAAoC,EACpC,QAA6C,EACrB,EAAE;YAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,QAAQ,CAAC,MAAM,CAAC;YACzB,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;YAE5B,IAAI,CAAC;gBACH,MAAM,SAAS,CACb,MAAM,EACN,IAAI,CAAC,WAAW,IAAI,EAAE,EACtB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,UAAU,CAChB,CAAC;gBACF,
|
|
1
|
+
{"version":3,"file":"set-value.js","sourceRoot":"","sources":["../../../src/tools/interactions/set-value.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,UAAU,EACV,8BAA8B,EAC9B,WAAW,EACX,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,MAAe;IAC9C,MAAM,cAAc,GAAG,CAAC;SACrB,MAAM,CAAC;QACN,WAAW,EAAE,iBAAiB,CAAC,QAAQ,EAAE;QACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC9C,UAAU,EAAE,CAAC;aACV,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,2EAA2E;YACzE,4EAA4E;YAC5E,yEAAyE,CAC5E;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;KAC1E,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,EAAE;QACnE,OAAO,EAAE,qDAAqD;KAC/D,CAAC,CAAC;IAEL,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,4BAA4B;QACzC,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EACZ,IAAoC,EACpC,QAA6C,EACrB,EAAE;YAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,QAAQ,CAAC,MAAM,CAAC;YACzB,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;YAE5B,IAAI,CAAC;gBACH,MAAM,SAAS,CACb,MAAM,EACN,IAAI,CAAC,WAAW,IAAI,EAAE,EACtB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,UAAU,CAChB,CAAC;gBACF,MAAM,MAAM,GAAG,0BAA0B,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,WAAW,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;gBAChJ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,OAAO,8BAA8B,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBAClE,CAAC;gBACD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,OAAO,WAAW,CAChB,uBAAuB,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,WAAW,IAAI,SAAS,UAAU,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAChH,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -8,7 +8,7 @@ import { getSelectedDevice, getSelectedDeviceType, getSelectedDeviceInfo, clearS
|
|
|
8
8
|
import { IOSManager } from '../../devicemanager/ios-manager.js';
|
|
9
9
|
import log from '../../logger.js';
|
|
10
10
|
import { createUIResource, createSessionDashboardUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
|
|
11
|
-
import { textResult } from '../tool-response.js';
|
|
11
|
+
import { textResult, toolErrorMessage } from '../tool-response.js';
|
|
12
12
|
import WebDriver from 'webdriver';
|
|
13
13
|
/**
|
|
14
14
|
* Load capabilities configuration from file if specified in environment
|
|
@@ -24,7 +24,7 @@ async function loadCapabilitiesConfig() {
|
|
|
24
24
|
return JSON.parse(configContent);
|
|
25
25
|
}
|
|
26
26
|
catch (error) {
|
|
27
|
-
log.warn(`Failed to parse capabilities config: ${error}`);
|
|
27
|
+
log.warn(`Failed to parse capabilities config: ${toolErrorMessage(error)}`);
|
|
28
28
|
return { android: {}, ios: {}, general: {} };
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-session.js","sourceRoot":"","sources":["../../../src/tools/session/create-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-session.js","sourceRoot":"","sources":["../../../src/tools/session/create-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,20 @@ import type { DriverInstance } from '../session-store.js';
|
|
|
4
4
|
* Normalizes unknown errors into a message string for tool responses.
|
|
5
5
|
*/
|
|
6
6
|
export declare function toolErrorMessage(err: unknown): string;
|
|
7
|
+
/**
|
|
8
|
+
* Reads the WebDriver element id from a findElement/activeElement payload,
|
|
9
|
+
* or returns the value when the driver already returned a plain id string.
|
|
10
|
+
*/
|
|
11
|
+
export declare function readWebElementId(element: unknown): string | undefined;
|
|
7
12
|
/**
|
|
8
13
|
* Standard success ContentResult.
|
|
9
14
|
*/
|
|
10
15
|
export declare function textResult(text: string): ContentResult;
|
|
16
|
+
/**
|
|
17
|
+
* Canonical first line: machine-parseable `elementId:<value>`, then human-readable detail.
|
|
18
|
+
* Strips newlines from elementId so the first line stays one logical field for parsers.
|
|
19
|
+
*/
|
|
20
|
+
export declare function textResultWithPrimaryElementId(elementId: string, detail: string): ContentResult;
|
|
11
21
|
/**
|
|
12
22
|
* Standard error ContentResult. Sets isError so MCP clients can handle
|
|
13
23
|
* failures consistently without throwing (which adds an unhelpful prefix).
|
|
@@ -22,8 +32,7 @@ export type DriverOrError = {
|
|
|
22
32
|
};
|
|
23
33
|
/**
|
|
24
34
|
* Resolves the driver for a tool call or returns a standardised error result.
|
|
25
|
-
*
|
|
26
|
-
* it never throws.
|
|
35
|
+
* Does not throw.
|
|
27
36
|
*/
|
|
28
37
|
export declare function resolveDriver(sessionId?: string): DriverOrError;
|
|
29
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-response.d.ts","sourceRoot":"","sources":["../../src/tools/tool-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-response.d.ts","sourceRoot":"","sources":["../../src/tools/tool-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUrE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAEtD;AAMD;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,aAAa,CAIf;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAEvD;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAY/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,aAAa,CAIf"}
|
|
@@ -1,16 +1,44 @@
|
|
|
1
1
|
import { getDriver } from '../session-store.js';
|
|
2
|
+
const W3C_ELEMENT_ID = 'element-6066-11e4-a52e-4f735466cecf';
|
|
2
3
|
/**
|
|
3
4
|
* Normalizes unknown errors into a message string for tool responses.
|
|
4
5
|
*/
|
|
5
6
|
export function toolErrorMessage(err) {
|
|
6
7
|
return err instanceof Error ? err.message : String(err);
|
|
7
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Reads the WebDriver element id from a findElement/activeElement payload,
|
|
11
|
+
* or returns the value when the driver already returned a plain id string.
|
|
12
|
+
*/
|
|
13
|
+
export function readWebElementId(element) {
|
|
14
|
+
if (typeof element === 'string') {
|
|
15
|
+
return element;
|
|
16
|
+
}
|
|
17
|
+
if (element === null || typeof element !== 'object') {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
const rec = element;
|
|
21
|
+
const id = rec[W3C_ELEMENT_ID] ?? rec.ELEMENT;
|
|
22
|
+
return typeof id === 'string' ? id : undefined;
|
|
23
|
+
}
|
|
8
24
|
/**
|
|
9
25
|
* Standard success ContentResult.
|
|
10
26
|
*/
|
|
11
27
|
export function textResult(text) {
|
|
12
28
|
return { content: [{ type: 'text', text }] };
|
|
13
29
|
}
|
|
30
|
+
function sanitizePrimaryElementIdLine(elementId) {
|
|
31
|
+
return elementId.replace(/[\r\n]+/g, '').trim();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Canonical first line: machine-parseable `elementId:<value>`, then human-readable detail.
|
|
35
|
+
* Strips newlines from elementId so the first line stays one logical field for parsers.
|
|
36
|
+
*/
|
|
37
|
+
export function textResultWithPrimaryElementId(elementId, detail) {
|
|
38
|
+
const safeId = sanitizePrimaryElementIdLine(elementId);
|
|
39
|
+
const d = detail.replace(/^\s+/, '');
|
|
40
|
+
return textResult(`elementId:${safeId}\n${d}`);
|
|
41
|
+
}
|
|
14
42
|
/**
|
|
15
43
|
* Standard error ContentResult. Sets isError so MCP clients can handle
|
|
16
44
|
* failures consistently without throwing (which adds an unhelpful prefix).
|
|
@@ -20,8 +48,7 @@ export function errorResult(text) {
|
|
|
20
48
|
}
|
|
21
49
|
/**
|
|
22
50
|
* Resolves the driver for a tool call or returns a standardised error result.
|
|
23
|
-
*
|
|
24
|
-
* it never throws.
|
|
51
|
+
* Does not throw.
|
|
25
52
|
*/
|
|
26
53
|
export function resolveDriver(sessionId) {
|
|
27
54
|
const driver = getDriver(sessionId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-response.js","sourceRoot":"","sources":["../../src/tools/tool-response.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC9D,CAAC;AAMD
|
|
1
|
+
{"version":3,"file":"tool-response.js","sourceRoot":"","sources":["../../src/tools/tool-response.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAE7D;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,MAAM,EAAE,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC;IAC9C,OAAO,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,4BAA4B,CAAC,SAAiB;IACrD,OAAO,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAC5C,SAAiB,EACjB,MAAc;IAEd,MAAM,MAAM,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,OAAO,UAAU,CAAC,aAAa,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC9D,CAAC;AAMD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,WAAW,CACjB,2BAA2B,GAAG,wDAAwD,CACvF;SACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,QAAgB,EAChB,MAAc;IAEd,OAAO,WAAW,CAChB,UAAU,MAAM,OAAO,QAAQ,uCAAuC,MAAM,IAAI,CACjF,CAAC;AACJ,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.66.0",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "npm",
|
|
10
10
|
"identifier": "appium-mcp",
|
|
11
|
-
"version": "1.
|
|
11
|
+
"version": "1.66.0",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
}
|
|
Binary file
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
errorResult,
|
|
12
12
|
textResult,
|
|
13
|
+
textResultWithPrimaryElementId,
|
|
13
14
|
toolErrorMessage,
|
|
14
15
|
} from '../../tool-response.js';
|
|
15
16
|
import type { GestureArgs } from '../schema.js';
|
|
@@ -74,12 +75,16 @@ export async function handleTap(
|
|
|
74
75
|
return errorResult(parsed.error);
|
|
75
76
|
}
|
|
76
77
|
await performActions(driver, w3cTapAt(parsed.x, parsed.y));
|
|
77
|
-
return
|
|
78
|
+
return textResultWithPrimaryElementId(
|
|
79
|
+
args.elementUUID,
|
|
78
80
|
`Successfully tapped at AI element coordinates (${parsed.x}, ${parsed.y}).`
|
|
79
81
|
);
|
|
80
82
|
}
|
|
81
83
|
await elementClick(driver, args.elementUUID);
|
|
82
|
-
return
|
|
84
|
+
return textResultWithPrimaryElementId(
|
|
85
|
+
args.elementUUID,
|
|
86
|
+
`Successfully tapped element ${args.elementUUID}.`
|
|
87
|
+
);
|
|
83
88
|
}
|
|
84
89
|
|
|
85
90
|
if (args.x === undefined || args.y === undefined) {
|
|
@@ -91,7 +96,7 @@ export async function handleTap(
|
|
|
91
96
|
return textResult(
|
|
92
97
|
`Successfully tapped at coordinates (${args.x}, ${args.y}).`
|
|
93
98
|
);
|
|
94
|
-
} catch (err) {
|
|
99
|
+
} catch (err: unknown) {
|
|
95
100
|
return errorResult(`Failed to perform tap. ${toolErrorMessage(err)}`);
|
|
96
101
|
}
|
|
97
102
|
}
|
|
@@ -110,7 +115,8 @@ export async function handleDoubleTap(
|
|
|
110
115
|
await execute(driver, 'mobile: doubleTap', {
|
|
111
116
|
elementId: args.elementUUID,
|
|
112
117
|
});
|
|
113
|
-
return
|
|
118
|
+
return textResultWithPrimaryElementId(
|
|
119
|
+
args.elementUUID,
|
|
114
120
|
`Successfully double tapped element ${args.elementUUID}.`
|
|
115
121
|
);
|
|
116
122
|
}
|
|
@@ -144,7 +150,7 @@ export async function handleDoubleTap(
|
|
|
144
150
|
},
|
|
145
151
|
]);
|
|
146
152
|
return textResult(`Successfully double tapped at (${x}, ${y}).`);
|
|
147
|
-
} catch (err) {
|
|
153
|
+
} catch (err: unknown) {
|
|
148
154
|
return errorResult(
|
|
149
155
|
`Failed to perform double_tap. ${toolErrorMessage(err)}`
|
|
150
156
|
);
|
|
@@ -174,7 +180,8 @@ export async function handleLongPress(
|
|
|
174
180
|
elementId: args.elementUUID,
|
|
175
181
|
duration: duration / 1000,
|
|
176
182
|
});
|
|
177
|
-
return
|
|
183
|
+
return textResultWithPrimaryElementId(
|
|
184
|
+
args.elementUUID,
|
|
178
185
|
`Successfully long pressed element ${args.elementUUID} for ${duration}ms.`
|
|
179
186
|
);
|
|
180
187
|
} catch {
|
|
@@ -209,7 +216,7 @@ export async function handleLongPress(
|
|
|
209
216
|
return textResult(
|
|
210
217
|
`Successfully long pressed at (${x}, ${y}) for ${duration}ms.`
|
|
211
218
|
);
|
|
212
|
-
} catch (err) {
|
|
219
|
+
} catch (err: unknown) {
|
|
213
220
|
return errorResult(
|
|
214
221
|
`Failed to perform long_press. ${toolErrorMessage(err)}`
|
|
215
222
|
);
|
package/src/tools/index.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* See src/tools/README.md for tool organization.
|
|
13
13
|
* See src/tools/metadata/README.md for YAML metadata approach.
|
|
14
14
|
*/
|
|
15
|
-
import type { FastMCP } from 'fastmcp';
|
|
15
|
+
import type { ContentResult, FastMCP } from 'fastmcp';
|
|
16
16
|
import log from '../logger.js';
|
|
17
17
|
import answerAppium from './documentation/answer-appium.js';
|
|
18
18
|
import appiumSkills from './documentation/appium-skills.js';
|
|
@@ -49,6 +49,30 @@ import context from './context/context.js';
|
|
|
49
49
|
|
|
50
50
|
type RegisteredTool = Parameters<FastMCP['addTool']>[0];
|
|
51
51
|
|
|
52
|
+
function sessionIdFromToolArgs(args: unknown): string | undefined {
|
|
53
|
+
if (
|
|
54
|
+
args &&
|
|
55
|
+
typeof args === 'object' &&
|
|
56
|
+
'sessionId' in args &&
|
|
57
|
+
typeof (args as { sessionId?: unknown }).sessionId === 'string'
|
|
58
|
+
) {
|
|
59
|
+
return (args as { sessionId: string }).sessionId;
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function isErrorFromToolResult(result: unknown): boolean {
|
|
65
|
+
if (
|
|
66
|
+
result &&
|
|
67
|
+
typeof result === 'object' &&
|
|
68
|
+
'content' in result &&
|
|
69
|
+
Array.isArray((result as { content: unknown }).content)
|
|
70
|
+
) {
|
|
71
|
+
return (result as ContentResult).isError === true;
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
|
|
52
76
|
export default function registerTools(server: FastMCP): void {
|
|
53
77
|
// Wrap addTool to inject logging around tool execution
|
|
54
78
|
const originalAddTool = server.addTool.bind(server);
|
|
@@ -106,14 +130,29 @@ export default function registerTools(server: FastMCP): void {
|
|
|
106
130
|
log.info(`[TOOL START] ${toolName}`, redactArgs(args));
|
|
107
131
|
try {
|
|
108
132
|
const result = await originalExecute(args, context);
|
|
109
|
-
const
|
|
110
|
-
log.info(
|
|
133
|
+
const durationMs = Date.now() - start;
|
|
134
|
+
log.info(
|
|
135
|
+
JSON.stringify({
|
|
136
|
+
tool: toolName,
|
|
137
|
+
durationMs,
|
|
138
|
+
sessionId: sessionIdFromToolArgs(args),
|
|
139
|
+
isError: isErrorFromToolResult(result),
|
|
140
|
+
})
|
|
141
|
+
);
|
|
111
142
|
return result;
|
|
112
143
|
} catch (err: unknown) {
|
|
113
|
-
const
|
|
144
|
+
const durationMs = Date.now() - start;
|
|
145
|
+
log.info(
|
|
146
|
+
JSON.stringify({
|
|
147
|
+
tool: toolName,
|
|
148
|
+
durationMs,
|
|
149
|
+
sessionId: sessionIdFromToolArgs(args),
|
|
150
|
+
isError: true,
|
|
151
|
+
})
|
|
152
|
+
);
|
|
114
153
|
const msg =
|
|
115
154
|
err instanceof Error ? err.stack || err.message : String(err);
|
|
116
|
-
log.error(`[TOOL ERROR] ${toolName} (${
|
|
155
|
+
log.error(`[TOOL ERROR] ${toolName} (${durationMs}ms): ${msg}`);
|
|
117
156
|
throw err;
|
|
118
157
|
}
|
|
119
158
|
},
|
|
@@ -3,9 +3,10 @@ import { z } from 'zod';
|
|
|
3
3
|
import { getActiveElement as _getActiveElement } from '../../command.js';
|
|
4
4
|
import {
|
|
5
5
|
resolveDriver,
|
|
6
|
-
|
|
6
|
+
textResultWithPrimaryElementId,
|
|
7
7
|
errorResult,
|
|
8
8
|
toolErrorMessage,
|
|
9
|
+
readWebElementId,
|
|
9
10
|
} from '../tool-response.js';
|
|
10
11
|
|
|
11
12
|
export default function getActiveElement(server: FastMCP): void {
|
|
@@ -34,9 +35,7 @@ export default function getActiveElement(server: FastMCP): void {
|
|
|
34
35
|
|
|
35
36
|
try {
|
|
36
37
|
const element = await _getActiveElement(driver);
|
|
37
|
-
const elementId =
|
|
38
|
-
element['element-6066-11e4-a52e-4f735466cecf'] ??
|
|
39
|
-
(element as unknown as { ELEMENT?: string }).ELEMENT;
|
|
38
|
+
const elementId = readWebElementId(element);
|
|
40
39
|
|
|
41
40
|
if (!elementId) {
|
|
42
41
|
throw new Error(
|
|
@@ -44,8 +43,9 @@ export default function getActiveElement(server: FastMCP): void {
|
|
|
44
43
|
);
|
|
45
44
|
}
|
|
46
45
|
|
|
47
|
-
return
|
|
48
|
-
|
|
46
|
+
return textResultWithPrimaryElementId(
|
|
47
|
+
elementId,
|
|
48
|
+
'Successfully found an active element.'
|
|
49
49
|
);
|
|
50
50
|
} catch (err: unknown) {
|
|
51
51
|
return errorResult(
|
|
@@ -6,9 +6,10 @@ import { AIVisionFinder } from '../../ai-finder/vision-finder.js';
|
|
|
6
6
|
import log from '../../logger.js';
|
|
7
7
|
import {
|
|
8
8
|
resolveDriver,
|
|
9
|
-
|
|
9
|
+
textResultWithPrimaryElementId,
|
|
10
10
|
errorResult,
|
|
11
11
|
toolErrorMessage,
|
|
12
|
+
readWebElementId,
|
|
12
13
|
} from '../tool-response.js';
|
|
13
14
|
|
|
14
15
|
// Module-level singleton: ensures the LRU cache persists across tool calls.
|
|
@@ -101,8 +102,13 @@ export default function findElement(server: FastMCP): void {
|
|
|
101
102
|
args.strategy,
|
|
102
103
|
args.selector
|
|
103
104
|
);
|
|
104
|
-
|
|
105
|
-
|
|
105
|
+
const elementId = readWebElementId(element);
|
|
106
|
+
if (!elementId) {
|
|
107
|
+
throw new Error('Element was returned without a valid element ID');
|
|
108
|
+
}
|
|
109
|
+
return textResultWithPrimaryElementId(
|
|
110
|
+
elementId,
|
|
111
|
+
`Successfully found element ${args.selector} with strategy ${args.strategy}.`
|
|
106
112
|
);
|
|
107
113
|
}
|
|
108
114
|
|
|
@@ -146,13 +152,13 @@ export default function findElement(server: FastMCP): void {
|
|
|
146
152
|
const elementUUID = `ai-element:${result.center.x},${result.center.y}:${result.bbox.join(',')}`;
|
|
147
153
|
|
|
148
154
|
// Step 5: Build response text with optional annotated image path
|
|
149
|
-
let
|
|
155
|
+
let detail = `Successfully found "${result.target}" at coordinates (${result.center.x}, ${result.center.y}) using AI vision.`;
|
|
150
156
|
|
|
151
157
|
if (result.annotatedImagePath) {
|
|
152
|
-
|
|
158
|
+
detail += ` Vision image: ${result.annotatedImagePath}`;
|
|
153
159
|
}
|
|
154
160
|
|
|
155
|
-
return
|
|
161
|
+
return textResultWithPrimaryElementId(elementUUID, detail);
|
|
156
162
|
} catch (err: unknown) {
|
|
157
163
|
const errorMessage = toolErrorMessage(err);
|
|
158
164
|
log.error('Failed to find element:', errorMessage);
|
|
@@ -4,7 +4,7 @@ import { elementUUIDScheme } from '../../schema.js';
|
|
|
4
4
|
import { getElementAttribute } from '../../command.js';
|
|
5
5
|
import {
|
|
6
6
|
resolveDriver,
|
|
7
|
-
|
|
7
|
+
textResultWithPrimaryElementId,
|
|
8
8
|
errorResult,
|
|
9
9
|
toolErrorMessage,
|
|
10
10
|
} from '../tool-response.js';
|
|
@@ -48,11 +48,11 @@ export default function getElementAttributeTool(server: FastMCP): void {
|
|
|
48
48
|
args.elementUUID,
|
|
49
49
|
args.attribute
|
|
50
50
|
);
|
|
51
|
-
|
|
51
|
+
const detail =
|
|
52
52
|
value !== null
|
|
53
53
|
? `Attribute "${args.attribute}" of element ${args.elementUUID}: ${value}`
|
|
54
|
-
: `Attribute "${args.attribute}" is not set on element ${args.elementUUID}
|
|
55
|
-
);
|
|
54
|
+
: `Attribute "${args.attribute}" is not set on element ${args.elementUUID}`;
|
|
55
|
+
return textResultWithPrimaryElementId(args.elementUUID, detail);
|
|
56
56
|
} catch (err: unknown) {
|
|
57
57
|
return errorResult(
|
|
58
58
|
`Failed to get attribute "${args.attribute}" from element ${args.elementUUID}. err: ${toolErrorMessage(err)}`
|
|
@@ -4,7 +4,7 @@ import { elementUUIDScheme } from '../../schema.js';
|
|
|
4
4
|
import { getElementText } from '../../command.js';
|
|
5
5
|
import {
|
|
6
6
|
resolveDriver,
|
|
7
|
-
|
|
7
|
+
textResultWithPrimaryElementId,
|
|
8
8
|
errorResult,
|
|
9
9
|
toolErrorMessage,
|
|
10
10
|
} from '../tool-response.js';
|
|
@@ -38,8 +38,9 @@ export default function getText(server: FastMCP): void {
|
|
|
38
38
|
|
|
39
39
|
try {
|
|
40
40
|
const text = await getElementText(driver, args.elementUUID);
|
|
41
|
-
return
|
|
42
|
-
|
|
41
|
+
return textResultWithPrimaryElementId(
|
|
42
|
+
args.elementUUID,
|
|
43
|
+
`Successfully got text ${text} from element ${args.elementUUID}.`
|
|
43
44
|
);
|
|
44
45
|
} catch (err: unknown) {
|
|
45
46
|
return errorResult(
|
|
@@ -5,6 +5,7 @@ import { setValue as _setValue } from '../../command.js';
|
|
|
5
5
|
import {
|
|
6
6
|
resolveDriver,
|
|
7
7
|
textResult,
|
|
8
|
+
textResultWithPrimaryElementId,
|
|
8
9
|
errorResult,
|
|
9
10
|
toolErrorMessage,
|
|
10
11
|
} from '../tool-response.js';
|
|
@@ -56,12 +57,14 @@ export default function setValue(server: FastMCP): void {
|
|
|
56
57
|
args.text,
|
|
57
58
|
args.w3cActions
|
|
58
59
|
);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
const detail = `Successfully set value ${args.text} into element ${args.elementUUID ?? '(focus)'}${args.w3cActions ? ' via W3C Actions' : ''}.`;
|
|
61
|
+
if (args.elementUUID) {
|
|
62
|
+
return textResultWithPrimaryElementId(args.elementUUID, detail);
|
|
63
|
+
}
|
|
64
|
+
return textResult(detail);
|
|
62
65
|
} catch (err: unknown) {
|
|
63
66
|
return errorResult(
|
|
64
|
-
`Failed to set value ${args.text} into element ${args.elementUUID}. err: ${toolErrorMessage(err)}`
|
|
67
|
+
`Failed to set value ${args.text} into element ${args.elementUUID ?? '(focus)'}. err: ${toolErrorMessage(err)}`
|
|
65
68
|
);
|
|
66
69
|
}
|
|
67
70
|
},
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
createSessionDashboardUI,
|
|
18
18
|
addUIResourceToResponse,
|
|
19
19
|
} from '../../ui/mcp-ui-utils.js';
|
|
20
|
-
import { textResult } from '../tool-response.js';
|
|
20
|
+
import { textResult, toolErrorMessage } from '../tool-response.js';
|
|
21
21
|
import WebDriver from 'webdriver';
|
|
22
22
|
|
|
23
23
|
// Define capabilities type
|
|
@@ -48,8 +48,8 @@ async function loadCapabilitiesConfig(): Promise<CapabilitiesConfig> {
|
|
|
48
48
|
await access(configPath, constants.F_OK);
|
|
49
49
|
const configContent = await readFile(configPath, 'utf8');
|
|
50
50
|
return JSON.parse(configContent);
|
|
51
|
-
} catch (error) {
|
|
52
|
-
log.warn(`Failed to parse capabilities config: ${error}`);
|
|
51
|
+
} catch (error: unknown) {
|
|
52
|
+
log.warn(`Failed to parse capabilities config: ${toolErrorMessage(error)}`);
|
|
53
53
|
return { android: {}, ios: {}, general: {} };
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -2,6 +2,8 @@ import type { ContentResult } from 'fastmcp';
|
|
|
2
2
|
import type { DriverInstance } from '../session-store.js';
|
|
3
3
|
import { getDriver } from '../session-store.js';
|
|
4
4
|
|
|
5
|
+
const W3C_ELEMENT_ID = 'element-6066-11e4-a52e-4f735466cecf';
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* Normalizes unknown errors into a message string for tool responses.
|
|
7
9
|
*/
|
|
@@ -9,6 +11,22 @@ export function toolErrorMessage(err: unknown): string {
|
|
|
9
11
|
return err instanceof Error ? err.message : String(err);
|
|
10
12
|
}
|
|
11
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Reads the WebDriver element id from a findElement/activeElement payload,
|
|
16
|
+
* or returns the value when the driver already returned a plain id string.
|
|
17
|
+
*/
|
|
18
|
+
export function readWebElementId(element: unknown): string | undefined {
|
|
19
|
+
if (typeof element === 'string') {
|
|
20
|
+
return element;
|
|
21
|
+
}
|
|
22
|
+
if (element === null || typeof element !== 'object') {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const rec = element as Record<string, unknown>;
|
|
26
|
+
const id = rec[W3C_ELEMENT_ID] ?? rec.ELEMENT;
|
|
27
|
+
return typeof id === 'string' ? id : undefined;
|
|
28
|
+
}
|
|
29
|
+
|
|
12
30
|
/**
|
|
13
31
|
* Standard success ContentResult.
|
|
14
32
|
*/
|
|
@@ -16,6 +34,23 @@ export function textResult(text: string): ContentResult {
|
|
|
16
34
|
return { content: [{ type: 'text', text }] };
|
|
17
35
|
}
|
|
18
36
|
|
|
37
|
+
function sanitizePrimaryElementIdLine(elementId: string): string {
|
|
38
|
+
return elementId.replace(/[\r\n]+/g, '').trim();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Canonical first line: machine-parseable `elementId:<value>`, then human-readable detail.
|
|
43
|
+
* Strips newlines from elementId so the first line stays one logical field for parsers.
|
|
44
|
+
*/
|
|
45
|
+
export function textResultWithPrimaryElementId(
|
|
46
|
+
elementId: string,
|
|
47
|
+
detail: string
|
|
48
|
+
): ContentResult {
|
|
49
|
+
const safeId = sanitizePrimaryElementIdLine(elementId);
|
|
50
|
+
const d = detail.replace(/^\s+/, '');
|
|
51
|
+
return textResult(`elementId:${safeId}\n${d}`);
|
|
52
|
+
}
|
|
53
|
+
|
|
19
54
|
/**
|
|
20
55
|
* Standard error ContentResult. Sets isError so MCP clients can handle
|
|
21
56
|
* failures consistently without throwing (which adds an unhelpful prefix).
|
|
@@ -30,8 +65,7 @@ export type DriverOrError =
|
|
|
30
65
|
|
|
31
66
|
/**
|
|
32
67
|
* Resolves the driver for a tool call or returns a standardised error result.
|
|
33
|
-
*
|
|
34
|
-
* it never throws.
|
|
68
|
+
* Does not throw.
|
|
35
69
|
*/
|
|
36
70
|
export function resolveDriver(sessionId?: string): DriverOrError {
|
|
37
71
|
const driver = getDriver(sessionId);
|