appium-mcp 1.87.7 → 1.87.8
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/interactions/screenshot.d.ts +0 -2
- package/dist/tools/interactions/screenshot.d.ts.map +1 -1
- package/dist/tools/interactions/screenshot.js +5 -6
- package/dist/tools/interactions/screenshot.js.map +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/tools/interactions/screenshot.ts +5 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [1.87.8](https://github.com/appium/appium-mcp/compare/v1.87.7...v1.87.8) (2026-07-22)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* **screenshot:** use resolveDriver for session rehydration parity ([#456](https://github.com/appium/appium-mcp/issues/456)) ([5bda643](https://github.com/appium/appium-mcp/commit/5bda643996bdba7116a2888e86991431cfa7ac60))
|
|
6
|
+
|
|
1
7
|
## [1.87.7](https://github.com/appium/appium-mcp/compare/v1.87.6...v1.87.7) (2026-07-21)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import type { FastMCP } from 'fastmcp';
|
|
2
|
-
import type { NullableDriverInstance } from '../../session-store.js';
|
|
3
2
|
import { resolveScreenshotDir } from '../../utils/paths.js';
|
|
4
3
|
export { resolveScreenshotDir };
|
|
5
4
|
export interface ScreenshotDeps {
|
|
6
|
-
getDriver: (sessionId?: string) => NullableDriverInstance;
|
|
7
5
|
writeFile: (filePath: string, data: Buffer) => Promise<unknown>;
|
|
8
6
|
mkdir: (dirPath: string, options?: {
|
|
9
7
|
recursive?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAWvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAQ5D,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,KAAK,EAAE,CACL,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KAC9B,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;IAClD,OAAO,EAAE,MAAM,MAAM,CAAC;CACvB;AASD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,GAAG,CAAC,CAgFf;AA8BD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAkBxD"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { getDriver } from '../../session-store.js';
|
|
2
1
|
import { elementUUIDScheme } from '../../schema.js';
|
|
3
2
|
import { fs, imageUtil } from '@appium/support';
|
|
4
3
|
import { join } from 'node:path';
|
|
@@ -6,10 +5,9 @@ import { createUIResource, createScreenshotViewerUI, addUIResourceToResponse, }
|
|
|
6
5
|
import { getScreenshot } from '../../command.js';
|
|
7
6
|
import z from 'zod';
|
|
8
7
|
import { resolveScreenshotDir } from '../../utils/paths.js';
|
|
9
|
-
import { textResult, errorResult, toolErrorMessage,
|
|
8
|
+
import { resolveDriver, textResult, errorResult, toolErrorMessage, } from '../tool-response.js';
|
|
10
9
|
export { resolveScreenshotDir };
|
|
11
10
|
const defaultDeps = {
|
|
12
|
-
getDriver,
|
|
13
11
|
writeFile: fs.writeFile,
|
|
14
12
|
mkdir: async (dirPath) => await fs.mkdirp(dirPath),
|
|
15
13
|
resolveScreenshotDir,
|
|
@@ -17,10 +15,11 @@ const defaultDeps = {
|
|
|
17
15
|
};
|
|
18
16
|
export async function executeScreenshot(opts) {
|
|
19
17
|
const { deps = defaultDeps, elementId, maxWidth, returnRawBase64, sessionId, } = opts;
|
|
20
|
-
const
|
|
21
|
-
if (!
|
|
22
|
-
return
|
|
18
|
+
const resolved = await resolveDriver(sessionId);
|
|
19
|
+
if (!resolved.ok) {
|
|
20
|
+
return resolved.result;
|
|
23
21
|
}
|
|
22
|
+
const { driver } = resolved;
|
|
24
23
|
try {
|
|
25
24
|
const screenshotBase64 = await getScreenshot(driver, elementId);
|
|
26
25
|
// Convert base64 to buffer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/interactions/screenshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/interactions/screenshot.ts"],"names":[],"mappings":"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"}
|
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.87.
|
|
6
|
+
"version": "1.87.8",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "npm",
|
|
10
10
|
"identifier": "appium-mcp",
|
|
11
|
-
"version": "1.87.
|
|
11
|
+
"version": "1.87.8",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type { FastMCP } from 'fastmcp';
|
|
2
|
-
import { getDriver } from '../../session-store.js';
|
|
3
2
|
import { elementUUIDScheme } from '../../schema.js';
|
|
4
|
-
import type { NullableDriverInstance } from '../../session-store.js';
|
|
5
3
|
import { fs, imageUtil } from '@appium/support';
|
|
6
4
|
import { join } from 'node:path';
|
|
7
5
|
import {
|
|
@@ -13,16 +11,15 @@ import { getScreenshot } from '../../command.js';
|
|
|
13
11
|
import z from 'zod';
|
|
14
12
|
import { resolveScreenshotDir } from '../../utils/paths.js';
|
|
15
13
|
import {
|
|
14
|
+
resolveDriver,
|
|
16
15
|
textResult,
|
|
17
16
|
errorResult,
|
|
18
17
|
toolErrorMessage,
|
|
19
|
-
noActiveDriverSessionResult,
|
|
20
18
|
} from '../tool-response.js';
|
|
21
19
|
|
|
22
20
|
export { resolveScreenshotDir };
|
|
23
21
|
|
|
24
22
|
export interface ScreenshotDeps {
|
|
25
|
-
getDriver: (sessionId?: string) => NullableDriverInstance;
|
|
26
23
|
writeFile: (filePath: string, data: Buffer) => Promise<unknown>;
|
|
27
24
|
mkdir: (
|
|
28
25
|
dirPath: string,
|
|
@@ -33,7 +30,6 @@ export interface ScreenshotDeps {
|
|
|
33
30
|
}
|
|
34
31
|
|
|
35
32
|
const defaultDeps: ScreenshotDeps = {
|
|
36
|
-
getDriver,
|
|
37
33
|
writeFile: fs.writeFile,
|
|
38
34
|
mkdir: async (dirPath) => await fs.mkdirp(dirPath),
|
|
39
35
|
resolveScreenshotDir,
|
|
@@ -55,10 +51,11 @@ export async function executeScreenshot(opts: {
|
|
|
55
51
|
sessionId,
|
|
56
52
|
} = opts;
|
|
57
53
|
|
|
58
|
-
const
|
|
59
|
-
if (!
|
|
60
|
-
return
|
|
54
|
+
const resolved = await resolveDriver(sessionId);
|
|
55
|
+
if (!resolved.ok) {
|
|
56
|
+
return resolved.result;
|
|
61
57
|
}
|
|
58
|
+
const { driver } = resolved;
|
|
62
59
|
|
|
63
60
|
try {
|
|
64
61
|
const screenshotBase64 = await getScreenshot(driver, elementId);
|