appium-mcp 1.77.0 → 1.78.1
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 +12 -0
- package/README.md +40 -17
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +49 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core.d.ts +2 -2
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/index.js +2 -36
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +33 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +128 -0
- package/dist/plugin.js.map +1 -1
- package/dist/tests/plugin.test.js +3 -0
- package/dist/tests/plugin.test.js.map +1 -1
- package/dist/tests/verify.test.d.ts +2 -0
- package/dist/tests/verify.test.d.ts.map +1 -0
- package/dist/tests/verify.test.js +133 -0
- package/dist/tests/verify.test.js.map +1 -0
- package/dist/tools/session/select-device.js +1 -1
- package/dist/tools/session/select-device.js.map +1 -1
- package/package.json +2 -1
- package/scripts/verify-names.mjs +12 -0
- package/server.json +2 -2
- package/src/cli/index.ts +58 -0
- package/src/core.ts +12 -1
- package/src/index.ts +2 -42
- package/src/plugin.ts +189 -0
- package/src/resources/submodules.zip +0 -0
- package/src/tools/session/select-device.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [1.78.1](https://github.com/appium/appium-mcp/compare/v1.78.0...v1.78.1) (2026-05-27)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* **select-device:** instruct to use real device preparation tool ([#368](https://github.com/appium/appium-mcp/issues/368)) ([45e489f](https://github.com/appium/appium-mcp/commit/45e489f03799a457248ddda379d6bf5989c839fc))
|
|
6
|
+
|
|
7
|
+
## [1.78.0](https://github.com/appium/appium-mcp/compare/v1.77.0...v1.78.0) (2026-05-26)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add plugin names/tool names verification cli ([#366](https://github.com/appium/appium-mcp/issues/366)) ([3ad1016](https://github.com/appium/appium-mcp/commit/3ad10163b2083b6346a27ba8b38adf6619c08b03))
|
|
12
|
+
|
|
1
13
|
## [1.77.0](https://github.com/appium/appium-mcp/compare/v1.76.0...v1.77.0) (2026-05-26)
|
|
2
14
|
|
|
3
15
|
### Features
|
package/README.md
CHANGED
|
@@ -137,23 +137,23 @@ This will automatically configure the MCP server for use with Claude Code. Make
|
|
|
137
137
|
|
|
138
138
|
> **Note:** Appium driver prerequisites (`ANDROID_HOME`, `JAVA_HOME`, UiAutomator2/XCUITest driver setup) are not listed here, they are system-level requirements. Once this MCP server is configured, ask your AI assistant to set up the environment for you using the built-in `appium_skills` tool.
|
|
139
139
|
|
|
140
|
-
| Variable
|
|
141
|
-
|
|
|
142
|
-
| `CAPABILITIES_CONFIG`
|
|
143
|
-
| `SCREENSHOTS_DIR`
|
|
144
|
-
| `NO_UI`
|
|
145
|
-
| `APPIUM_MCP_ON_CLIENT_DISCONNECT`
|
|
146
|
-
| `APPIUM_MCP_WDA_APP_PATH`
|
|
147
|
-
| `REMOTE_SERVER_URL_ALLOW_REGEX`
|
|
148
|
-
| `AI_VISION_ENABLED`
|
|
149
|
-
| `AI_VISION_API_BASE_URL`
|
|
150
|
-
| `AI_VISION_API_KEY`
|
|
151
|
-
| `AI_VISION_MODEL`
|
|
152
|
-
| `AI_VISION_COORD_TYPE`
|
|
153
|
-
| `AI_VISION_IMAGE_MAX_WIDTH`
|
|
154
|
-
| `AI_VISION_IMAGE_QUALITY`
|
|
155
|
-
| `SENTENCE_TRANSFORMERS_MODEL`
|
|
156
|
-
| `APPIUM_MCP_PERSIST_REMOTE_SESSIONS_PATH` | Optional
|
|
140
|
+
| Variable | Required | Description |
|
|
141
|
+
| ----------------------------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
142
|
+
| `CAPABILITIES_CONFIG` | Optional | Absolute path to a `capabilities.json` file with per-platform capability presets |
|
|
143
|
+
| `SCREENSHOTS_DIR` | Optional | Directory where screenshots and screen recordings are saved. Defaults to the current working directory |
|
|
144
|
+
| `NO_UI` | Optional | Set to `true` or `1` to disable HTML UI components — faster responses, fewer tokens. See [NO_UI Mode](#no_ui-mode) |
|
|
145
|
+
| `APPIUM_MCP_ON_CLIENT_DISCONNECT` | Optional | Session cleanup when the MCP client disconnects: `delete_all` (default) deletes **MCP-owned** Appium sessions (`safeDeleteAllSessions`); `skip` keeps those sessions across disconnects (e.g. HTTP/stream clients that reconnect). Attached/remote sessions are not removed by this path. See [MCP disconnect behavior](#mcp-disconnect-behavior). |
|
|
146
|
+
| `APPIUM_MCP_WDA_APP_PATH` | Optional | Absolute path to a pre-extracted `WebDriverAgentRunner-Runner.app` bundle. When set, `prepare_ios_simulator` skips all GitHub downloads and uses this bundle directly — useful in environments where external downloads are blocked |
|
|
147
|
+
| `REMOTE_SERVER_URL_ALLOW_REGEX` | Optional | Regex pattern that remote Appium server URLs must match. Defaults to `^https?://` |
|
|
148
|
+
| `AI_VISION_ENABLED` | Optional | Set to `true` to register the `appium_ai` tool (vision-based element finding). When unset or `false`, the AI tool is **not registered** and the LLM has no way to invoke vision-based finding. Requires `AI_VISION_API_BASE_URL` and `AI_VISION_API_KEY` to also be set, otherwise the server fails to start. |
|
|
149
|
+
| `AI_VISION_API_BASE_URL` | Required when `AI_VISION_ENABLED=true` | Base URL of the OpenAI-compatible vision model API |
|
|
150
|
+
| `AI_VISION_API_KEY` | Required when `AI_VISION_ENABLED=true` | API key for the vision model provider |
|
|
151
|
+
| `AI_VISION_MODEL` | Optional | Vision model name (default: `Qwen3-VL-235B-A22B-Instruct`) |
|
|
152
|
+
| `AI_VISION_COORD_TYPE` | Optional | Coordinate type: `normalized` (default) or `absolute` |
|
|
153
|
+
| `AI_VISION_IMAGE_MAX_WIDTH` | Optional | Max image width in pixels before compression (default: `1080`) |
|
|
154
|
+
| `AI_VISION_IMAGE_QUALITY` | Optional | JPEG quality 1–100 for compressed screenshots sent to the vision API (default: `80`) |
|
|
155
|
+
| `SENTENCE_TRANSFORMERS_MODEL` | Optional | Hugging Face model used for semantic search in Appium documentation queries (default: `Xenova/all-MiniLM-L6-v2`) |
|
|
156
|
+
| `APPIUM_MCP_PERSIST_REMOTE_SESSIONS_PATH` | Optional | Absolute file path to persist attached remote session info across server restarts (JSON format) |
|
|
157
157
|
|
|
158
158
|
### Capabilities
|
|
159
159
|
|
|
@@ -405,6 +405,29 @@ Each plugin name should be unique within the server. If two plugins use the same
|
|
|
405
405
|
|
|
406
406
|
Each tool name should also be unique across all plugins and the core server. FastMCP registers the latest tool definition for a name, so a duplicate name can replace an earlier tool definition. Appium MCP registers plugin tools before built-in tools, which means a plugin tool that uses the same name as a built-in tool can be replaced by the built-in tool. Appium MCP tools usually have an `appium_` prefix, so plugin tool names should avoid that pattern to reduce the chance of collisions with future core tools.
|
|
407
407
|
|
|
408
|
+
### Verify plugin and tool names
|
|
409
|
+
|
|
410
|
+
Use `verifyAppiumMcpNames` before publishing or deploying a custom plugin setup. It registers your plugin capabilities into a lightweight collector, registers the Appium MCP core tools, and reports duplicate plugin names, duplicate tool names, and registration errors without starting the MCP server.
|
|
411
|
+
|
|
412
|
+
The recommended approach is to verify the same plugin array you pass to `createAppiumMcpServer({ plugins })`. This preserves your real plugin instances and order:
|
|
413
|
+
|
|
414
|
+
```ts
|
|
415
|
+
import {
|
|
416
|
+
formatVerificationReport,
|
|
417
|
+
verifyAppiumMcpNames,
|
|
418
|
+
} from 'appium-mcp/core';
|
|
419
|
+
import { plugins } from './plugins.js';
|
|
420
|
+
|
|
421
|
+
const report = verifyAppiumMcpNames({ plugins });
|
|
422
|
+
|
|
423
|
+
console.log(formatVerificationReport(report));
|
|
424
|
+
process.exit(report.ok ? 0 : 1);
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
When you provide multiple plugins, order is preserved. Plugins are verified in array order. This matters because Appium MCP keeps the first plugin for a duplicate plugin name and skips later plugins with the same name. Tool names still need to be unique across all loaded plugins and `appium-mcp core`; the verifier reports any collisions it finds.
|
|
428
|
+
|
|
429
|
+
The report labels this package's own shipped tools as `appium-mcp core`. Plugin sources are labeled as `plugin:<name>` with the plugin version.
|
|
430
|
+
|
|
408
431
|
Treat anything outside `appium-mcp/core` as internal. In particular, plugins should not rely on private server internals, internal session-store modules, tool implementation files, or the raw FastMCP server instance. If a plugin needs another stable primitive, open an issue so it can be added to `AppiumMcpCore` or `McpRegistry` deliberately.
|
|
409
432
|
|
|
410
433
|
See [examples/plugin-example.ts](examples/plugin-example.ts) for a fuller cookbook with tools, prompts, resources, resource templates, call hooks, and lifecycle setup.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAEA,wBAAsB,MAAM,CAC1B,IAAI,GAAE,MAAM,EAA0B,GACrC,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import log from '../logger.js';
|
|
2
|
+
export async function runCli(args = process.argv.slice(2)) {
|
|
3
|
+
const command = args[0];
|
|
4
|
+
if (command === '--help' || command === '-h' || command === 'help') {
|
|
5
|
+
printHelp();
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
await startServer(args);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function printHelp() {
|
|
12
|
+
log.info(`Usage: appium-mcp [command] [options]
|
|
13
|
+
|
|
14
|
+
Options:
|
|
15
|
+
--httpStream Start with httpStream transport
|
|
16
|
+
--port=<port> Port for httpStream transport (default: 8080)
|
|
17
|
+
--help Show this help message`);
|
|
18
|
+
}
|
|
19
|
+
async function startServer(args) {
|
|
20
|
+
const useHttpStream = args.includes('--httpStream');
|
|
21
|
+
const port = args.find((arg) => arg.startsWith('--port='))?.split('=')[1] || '8080';
|
|
22
|
+
log.info('Starting MCP Appium MCP Server...');
|
|
23
|
+
try {
|
|
24
|
+
const { default: server } = await import('../server.js');
|
|
25
|
+
if (useHttpStream) {
|
|
26
|
+
await server.start({
|
|
27
|
+
transportType: 'httpStream',
|
|
28
|
+
httpStream: {
|
|
29
|
+
endpoint: '/sse',
|
|
30
|
+
port: parseInt(port, 10),
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
log.info(`Server started with httpStream transport on http://localhost:${port}/sse`);
|
|
34
|
+
log.info('Waiting for client connections...');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
await server.start({
|
|
38
|
+
transportType: 'stdio',
|
|
39
|
+
});
|
|
40
|
+
log.info('Server started with stdio transport');
|
|
41
|
+
log.info('Waiting for client connections...');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
log.error('Error starting server:', error);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,cAAc,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACnE,SAAS,EAAE,CAAC;IACd,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,GAAG,CAAC,IAAI,CAAC;;;;;uCAK4B,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAc;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IAEzE,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAEzD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,MAAM,CAAC,KAAK,CAAC;gBACjB,aAAa,EAAE,YAAY;gBAC3B,UAAU,EAAE;oBACV,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;iBACzB;aACF,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,CACN,gEAAgE,IAAI,MAAM,CAC3E,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,CAAC,KAAK,CAAC;gBACjB,aAAa,EAAE,OAAO;aACvB,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/core.d.ts
CHANGED
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export { createAppiumMcpServer } from './create-server.js';
|
|
9
9
|
export type { CreateAppiumMcpServerOptions } from './create-server.js';
|
|
10
|
-
export { AppiumMcpCore, McpRegistry, PluginManager } from './plugin.js';
|
|
11
|
-
export type { AppiumMcpPlugin, PluginContext, PluginSessionContext, ToolCallContext, ToolCallResult, } from './plugin.js';
|
|
10
|
+
export { AppiumMcpCore, formatVerificationReport, McpRegistry, PluginManager, verifyAppiumMcpNames, } from './plugin.js';
|
|
11
|
+
export type { AppiumMcpPlugin, PluginContext, PluginSessionContext, ToolCallContext, ToolCallResult, VerificationDuplicate, VerificationDuplicateKind, VerificationEntry, VerificationReport, VerifyAppiumMcpNamesOptions, } from './plugin.js';
|
|
12
12
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,aAAa,CAAC"}
|
package/dist/core.js
CHANGED
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
* hooks.
|
|
7
7
|
*/
|
|
8
8
|
export { createAppiumMcpServer } from './create-server.js';
|
|
9
|
-
export { AppiumMcpCore, McpRegistry, PluginManager } from './plugin.js';
|
|
9
|
+
export { AppiumMcpCore, formatVerificationReport, McpRegistry, PluginManager, verifyAppiumMcpNames, } from './plugin.js';
|
|
10
10
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,38 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
// Parse command line arguments
|
|
5
|
-
const args = process.argv.slice(2);
|
|
6
|
-
const useHttpStream = args.includes('--httpStream');
|
|
7
|
-
const port = args.find((arg) => arg.startsWith('--port='))?.split('=')[1] || '8080';
|
|
8
|
-
async function startServer() {
|
|
9
|
-
log.info('Starting MCP Appium MCP Server...');
|
|
10
|
-
try {
|
|
11
|
-
if (useHttpStream) {
|
|
12
|
-
await server.start({
|
|
13
|
-
transportType: 'httpStream',
|
|
14
|
-
httpStream: {
|
|
15
|
-
endpoint: '/sse',
|
|
16
|
-
port: parseInt(port, 10),
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
log.info(`Server started with httpStream transport on http://localhost:${port}/sse`);
|
|
20
|
-
log.info('Waiting for client connections...');
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
// Start with stdio transport
|
|
24
|
-
await server.start({
|
|
25
|
-
transportType: 'stdio',
|
|
26
|
-
});
|
|
27
|
-
log.info('Server started with stdio transport');
|
|
28
|
-
log.info('Waiting for client connections...');
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
log.error('Error starting server:', error);
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// Start the server
|
|
37
|
-
void startServer();
|
|
2
|
+
import { runCli } from './cli/index.js';
|
|
3
|
+
void runCli();
|
|
38
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,KAAK,MAAM,EAAE,CAAC"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -61,6 +61,31 @@ export interface AppiumMcpPlugin {
|
|
|
61
61
|
afterCall?(ctx: ToolCallContext, result: ToolCallResult): Promise<ToolCallResult | void>;
|
|
62
62
|
destroy?(): Promise<void>;
|
|
63
63
|
}
|
|
64
|
+
export type VerificationDuplicateKind = 'plugin' | 'tool';
|
|
65
|
+
export interface VerificationEntry {
|
|
66
|
+
name: string;
|
|
67
|
+
source: string;
|
|
68
|
+
}
|
|
69
|
+
export interface VerificationDuplicate {
|
|
70
|
+
kind: VerificationDuplicateKind;
|
|
71
|
+
name: string;
|
|
72
|
+
entries: VerificationEntry[];
|
|
73
|
+
}
|
|
74
|
+
export interface VerificationError {
|
|
75
|
+
source: string;
|
|
76
|
+
message: string;
|
|
77
|
+
}
|
|
78
|
+
export interface VerificationReport {
|
|
79
|
+
ok: boolean;
|
|
80
|
+
pluginCount: number;
|
|
81
|
+
toolCount: number;
|
|
82
|
+
duplicates: VerificationDuplicate[];
|
|
83
|
+
errors: VerificationError[];
|
|
84
|
+
}
|
|
85
|
+
export interface VerifyAppiumMcpNamesOptions {
|
|
86
|
+
plugins?: AppiumMcpPlugin[];
|
|
87
|
+
errors?: VerificationError[];
|
|
88
|
+
}
|
|
64
89
|
type AddToolParam = Parameters<FastMCP['addTool']>[0];
|
|
65
90
|
type AddPromptParam = Parameters<FastMCP['addPrompt']>[0];
|
|
66
91
|
type AddResourceParam = Parameters<FastMCP['addResource']>[0];
|
|
@@ -172,5 +197,13 @@ export declare class PluginManager {
|
|
|
172
197
|
destroy(): Promise<void>;
|
|
173
198
|
private installAddToolInterceptor;
|
|
174
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Verify that plugin and tool names are unique across a set of plugins
|
|
202
|
+
* and report any duplicates or registration errors.
|
|
203
|
+
* @param options - Options for verification, including the list of plugins and any pre-existing errors.
|
|
204
|
+
* @returns A report detailing any duplicates or errors found during verification.
|
|
205
|
+
*/
|
|
206
|
+
export declare function verifyAppiumMcpNames(options?: VerifyAppiumMcpNamesOptions): VerificationReport;
|
|
207
|
+
export declare function formatVerificationReport(report: VerificationReport): string;
|
|
175
208
|
export {};
|
|
176
209
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,OAAO,EACP,kBAAkB,EAClB,IAAI,EACJ,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAIL,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { getDriver, getSessionId, getSessionInfo, listSessions, } from './session-store.js';
|
|
9
9
|
import log from './logger.js';
|
|
10
|
+
import registerTools from './tools/index.js';
|
|
11
|
+
const CORE_SOURCE = 'appium-mcp core';
|
|
10
12
|
export class McpRegistry {
|
|
11
13
|
server;
|
|
12
14
|
constructor(server) {
|
|
@@ -236,4 +238,130 @@ export class PluginManager {
|
|
|
236
238
|
};
|
|
237
239
|
}
|
|
238
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Verify that plugin and tool names are unique across a set of plugins
|
|
243
|
+
* and report any duplicates or registration errors.
|
|
244
|
+
* @param options - Options for verification, including the list of plugins and any pre-existing errors.
|
|
245
|
+
* @returns A report detailing any duplicates or errors found during verification.
|
|
246
|
+
*/
|
|
247
|
+
export function verifyAppiumMcpNames(options = {}) {
|
|
248
|
+
const plugins = options.plugins ?? [];
|
|
249
|
+
const errors = [...(options.errors ?? [])];
|
|
250
|
+
const duplicates = [];
|
|
251
|
+
const toolEntries = [];
|
|
252
|
+
let currentSource = CORE_SOURCE;
|
|
253
|
+
const collector = {
|
|
254
|
+
addTool(toolDef) {
|
|
255
|
+
toolEntries.push({
|
|
256
|
+
name: toolDef.name,
|
|
257
|
+
source: currentSource,
|
|
258
|
+
});
|
|
259
|
+
},
|
|
260
|
+
addPrompt() { },
|
|
261
|
+
addResource() { },
|
|
262
|
+
addResourceTemplate() { },
|
|
263
|
+
};
|
|
264
|
+
const pluginEntries = plugins.map((plugin) => ({
|
|
265
|
+
name: plugin.name,
|
|
266
|
+
source: `plugin:${plugin.name}@${plugin.version}`,
|
|
267
|
+
}));
|
|
268
|
+
duplicates.push(...findDuplicates('plugin', pluginEntries));
|
|
269
|
+
const seenPluginNames = new Set();
|
|
270
|
+
const registry = new McpRegistry(collector);
|
|
271
|
+
const core = new AppiumMcpCore();
|
|
272
|
+
for (const plugin of plugins) {
|
|
273
|
+
if (seenPluginNames.has(plugin.name)) {
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
seenPluginNames.add(plugin.name);
|
|
277
|
+
if (typeof plugin.register !== 'function') {
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
currentSource = `plugin:${plugin.name}`;
|
|
281
|
+
try {
|
|
282
|
+
plugin.register(registry, core);
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
errors.push({
|
|
286
|
+
source: currentSource,
|
|
287
|
+
message: errorMessage(err),
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
currentSource = CORE_SOURCE;
|
|
292
|
+
try {
|
|
293
|
+
withSuppressedRegistrationLogs(() => registerTools(collector));
|
|
294
|
+
}
|
|
295
|
+
catch (err) {
|
|
296
|
+
errors.push({
|
|
297
|
+
source: currentSource,
|
|
298
|
+
message: errorMessage(err),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
duplicates.push(...findDuplicates('tool', toolEntries));
|
|
302
|
+
return {
|
|
303
|
+
ok: duplicates.length === 0 && errors.length === 0,
|
|
304
|
+
pluginCount: new Set(pluginEntries.map((entry) => entry.name)).size,
|
|
305
|
+
toolCount: toolEntries.length,
|
|
306
|
+
duplicates,
|
|
307
|
+
errors,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
export function formatVerificationReport(report) {
|
|
311
|
+
const lines = [
|
|
312
|
+
`Checked ${report.pluginCount} plugin name(s) and ${report.toolCount} tool name(s).`,
|
|
313
|
+
];
|
|
314
|
+
if (report.ok) {
|
|
315
|
+
lines.push('No duplicate plugin or tool names found.');
|
|
316
|
+
return lines.join('\n');
|
|
317
|
+
}
|
|
318
|
+
if (report.duplicates.length > 0) {
|
|
319
|
+
lines.push('Duplicate names found:');
|
|
320
|
+
for (const duplicate of report.duplicates) {
|
|
321
|
+
const sources = duplicate.entries
|
|
322
|
+
.map((entry) => ` - ${entry.source}`)
|
|
323
|
+
.join('\n');
|
|
324
|
+
lines.push(` ${duplicate.kind}: ${duplicate.name}\n${sources}`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
if (report.errors.length > 0) {
|
|
328
|
+
lines.push('Registration/load errors found:');
|
|
329
|
+
for (const error of report.errors) {
|
|
330
|
+
lines.push(` ${error.source}: ${error.message}`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return lines.join('\n');
|
|
334
|
+
}
|
|
335
|
+
function withSuppressedRegistrationLogs(fn) {
|
|
336
|
+
const mutableLog = log;
|
|
337
|
+
const originalInfo = mutableLog.info;
|
|
338
|
+
mutableLog.info = () => { };
|
|
339
|
+
try {
|
|
340
|
+
fn();
|
|
341
|
+
}
|
|
342
|
+
finally {
|
|
343
|
+
mutableLog.info = originalInfo;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
function findDuplicates(kind, entries) {
|
|
347
|
+
const byName = new Map();
|
|
348
|
+
for (const entry of entries) {
|
|
349
|
+
const existing = byName.get(entry.name) ?? [];
|
|
350
|
+
existing.push(entry);
|
|
351
|
+
byName.set(entry.name, existing);
|
|
352
|
+
}
|
|
353
|
+
return Array.from(byName.entries())
|
|
354
|
+
.filter(([, duplicateEntries]) => duplicateEntries.length > 1)
|
|
355
|
+
.map(([name, duplicateEntries]) => ({
|
|
356
|
+
kind,
|
|
357
|
+
name,
|
|
358
|
+
entries: duplicateEntries,
|
|
359
|
+
}));
|
|
360
|
+
}
|
|
361
|
+
function errorMessage(err) {
|
|
362
|
+
if (err instanceof Error) {
|
|
363
|
+
return err.message;
|
|
364
|
+
}
|
|
365
|
+
return String(err);
|
|
366
|
+
}
|
|
239
367
|
//# sourceMappingURL=plugin.js.map
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,9 @@ await jest.unstable_mockModule('../logger', () => ({
|
|
|
15
15
|
error: jest.fn(),
|
|
16
16
|
},
|
|
17
17
|
}));
|
|
18
|
+
await jest.unstable_mockModule('../tools/index', () => ({
|
|
19
|
+
default: jest.fn(),
|
|
20
|
+
}));
|
|
18
21
|
const { AppiumMcpCore, PluginManager, McpRegistry } = await import('../plugin.js');
|
|
19
22
|
const log = (await import('../logger.js')).default;
|
|
20
23
|
const { setSession, safeDeleteAllSessions } = await import('../session-store.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.test.js","sourceRoot":"","sources":["../../src/tests/plugin.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.test.js","sourceRoot":"","sources":["../../src/tests/plugin.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.test.d.ts","sourceRoot":"","sources":["../../src/tests/verify.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { describe, expect, jest, test } from '@jest/globals';
|
|
2
|
+
await jest.unstable_mockModule('appium-uiautomator2-driver', () => ({
|
|
3
|
+
AndroidUiautomator2Driver: class MockAndroidUiautomator2Driver {
|
|
4
|
+
},
|
|
5
|
+
}));
|
|
6
|
+
await jest.unstable_mockModule('appium-xcuitest-driver', () => ({
|
|
7
|
+
XCUITestDriver: class MockXCUITestDriver {
|
|
8
|
+
},
|
|
9
|
+
}));
|
|
10
|
+
await jest.unstable_mockModule('../tools/index', () => ({
|
|
11
|
+
default: (server) => {
|
|
12
|
+
server.addTool({ name: 'builtin_tool' });
|
|
13
|
+
server.addTool({ name: 'another_builtin_tool' });
|
|
14
|
+
},
|
|
15
|
+
}));
|
|
16
|
+
const { formatVerificationReport, verifyAppiumMcpNames } = await import('../plugin.js');
|
|
17
|
+
describe('verifyAppiumMcpNames', () => {
|
|
18
|
+
test('passes when plugin and tool names are unique', () => {
|
|
19
|
+
const plugin = {
|
|
20
|
+
name: 'unique-plugin',
|
|
21
|
+
version: '1.0.0',
|
|
22
|
+
register(registry) {
|
|
23
|
+
registry.addTool('plugin_tool', 'plugin tool', {}, async () => ({
|
|
24
|
+
content: [{ type: 'text', text: 'ok' }],
|
|
25
|
+
}));
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
const report = verifyAppiumMcpNames({ plugins: [plugin] });
|
|
29
|
+
expect(report.ok).toBe(true);
|
|
30
|
+
expect(report.duplicates).toEqual([]);
|
|
31
|
+
expect(report.pluginCount).toBe(1);
|
|
32
|
+
expect(report.toolCount).toBe(3);
|
|
33
|
+
expect(report.errors).toEqual([]);
|
|
34
|
+
});
|
|
35
|
+
test('reports duplicate plugin names', () => {
|
|
36
|
+
const plugins = [
|
|
37
|
+
{ name: 'duplicate-plugin', version: '1.0.0' },
|
|
38
|
+
{ name: 'duplicate-plugin', version: '2.0.0' },
|
|
39
|
+
];
|
|
40
|
+
const report = verifyAppiumMcpNames({ plugins });
|
|
41
|
+
expect(report.ok).toBe(false);
|
|
42
|
+
expect(report.duplicates).toEqual([
|
|
43
|
+
{
|
|
44
|
+
kind: 'plugin',
|
|
45
|
+
name: 'duplicate-plugin',
|
|
46
|
+
entries: [
|
|
47
|
+
{
|
|
48
|
+
name: 'duplicate-plugin',
|
|
49
|
+
source: 'plugin:duplicate-plugin@1.0.0',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'duplicate-plugin',
|
|
53
|
+
source: 'plugin:duplicate-plugin@2.0.0',
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
]);
|
|
58
|
+
expect(report.errors).toEqual([]);
|
|
59
|
+
});
|
|
60
|
+
test('reports duplicate tool names across plugins and built-ins', () => {
|
|
61
|
+
const plugin = {
|
|
62
|
+
name: 'conflicting-plugin',
|
|
63
|
+
version: '1.0.0',
|
|
64
|
+
register(registry) {
|
|
65
|
+
registry.addTool('builtin_tool', 'conflicting tool', {}, async () => ({
|
|
66
|
+
content: [{ type: 'text', text: 'ok' }],
|
|
67
|
+
}));
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
const report = verifyAppiumMcpNames({ plugins: [plugin] });
|
|
71
|
+
expect(report.ok).toBe(false);
|
|
72
|
+
expect(report.duplicates).toEqual([
|
|
73
|
+
{
|
|
74
|
+
kind: 'tool',
|
|
75
|
+
name: 'builtin_tool',
|
|
76
|
+
entries: [
|
|
77
|
+
{ name: 'builtin_tool', source: 'plugin:conflicting-plugin' },
|
|
78
|
+
{ name: 'builtin_tool', source: 'appium-mcp core' },
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
]);
|
|
82
|
+
expect(report.errors).toEqual([]);
|
|
83
|
+
});
|
|
84
|
+
test('collects plugin registration errors and continues checking tools', () => {
|
|
85
|
+
const plugins = [
|
|
86
|
+
{
|
|
87
|
+
name: 'broken-plugin',
|
|
88
|
+
version: '1.0.0',
|
|
89
|
+
register() {
|
|
90
|
+
throw new Error('plugin setup failed');
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'working-plugin',
|
|
95
|
+
version: '1.0.0',
|
|
96
|
+
register(registry) {
|
|
97
|
+
registry.addTool('working_plugin_tool', 'working tool', {}, async () => ({
|
|
98
|
+
content: [{ type: 'text', text: 'ok' }],
|
|
99
|
+
}));
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
const report = verifyAppiumMcpNames({ plugins });
|
|
104
|
+
expect(report.ok).toBe(false);
|
|
105
|
+
expect(report.toolCount).toBe(3);
|
|
106
|
+
expect(report.duplicates).toEqual([]);
|
|
107
|
+
expect(report.errors).toEqual([
|
|
108
|
+
{
|
|
109
|
+
source: 'plugin:broken-plugin',
|
|
110
|
+
message: 'plugin setup failed',
|
|
111
|
+
},
|
|
112
|
+
]);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('formatVerificationReport', () => {
|
|
116
|
+
test('formats passing reports', () => {
|
|
117
|
+
const report = verifyAppiumMcpNames();
|
|
118
|
+
expect(formatVerificationReport(report)).toBe('Checked 0 plugin name(s) and 2 tool name(s).\n' +
|
|
119
|
+
'No duplicate plugin or tool names found.');
|
|
120
|
+
});
|
|
121
|
+
test('formats error reports', () => {
|
|
122
|
+
expect(formatVerificationReport({
|
|
123
|
+
ok: false,
|
|
124
|
+
pluginCount: 1,
|
|
125
|
+
toolCount: 2,
|
|
126
|
+
duplicates: [],
|
|
127
|
+
errors: [{ source: 'appium-mcp core', message: 'AI config missing' }],
|
|
128
|
+
})).toBe('Checked 1 plugin name(s) and 2 tool name(s).\n' +
|
|
129
|
+
'Registration/load errors found:\n' +
|
|
130
|
+
' appium-mcp core: AI config missing');
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=verify.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.test.js","sourceRoot":"","sources":["../../src/tests/verify.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -172,7 +172,7 @@ function selectIOSDevice(deviceUdid, devices, iosDeviceType) {
|
|
|
172
172
|
function formatIOSSelectionResponse(deviceName, deviceUdid) {
|
|
173
173
|
return textResult(JSON.stringify({
|
|
174
174
|
message: `✅ Device selected: ${deviceName} (${deviceUdid})`,
|
|
175
|
-
instructions: '🚀 You can now call the prepare_ios_simulator tool to boot and setup WDA on the simulator.',
|
|
175
|
+
instructions: '🚀 You can now call the prepare_ios_simulator tool to boot and setup WDA on the simulator or the appium_prepare_ios_real_device tool to setup WDA on ios real device.',
|
|
176
176
|
platform: 'ios',
|
|
177
177
|
capabilities: {
|
|
178
178
|
'appium:udid': deviceUdid,
|
|
@@ -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;AAClC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,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,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAW;IAC9C,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE;;;;;;;;;;;;OAYV;QACH,UAAU,EAAE,CAAC;aACV,MAAM,CAAC;YACN,QAAQ,EAAE,CAAC;iBACR,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;iBACxB,QAAQ,CACP,4EAA4E,CAC7E;YACH,aAAa,EAAE,CAAC;iBACb,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;iBAC3B,QAAQ,EAAE;iBACV,QAAQ,CACP,qGAAqG,CACtG;YACH,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,kIAAkI,CACnI;SACJ,CAAC;aACD,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EACrE;YACE,OAAO,EACL,0EAA0E;YAC5E,IAAI,EAAE,CAAC,eAAe,CAAC;SACxB,CACF;QACH,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,QAAa,EAAgB,EAAE;YACxD,IAAI,CAAC;gBACH,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;gBAErD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,OAAO,MAAM,4BAA4B,CAAC,UAAU,CAAC,CAAC;gBACxD,CAAC;qBAAM,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;oBAC9B,OAAO,MAAM,wBAAwB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,qCAAqC,CACnE,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,EAAE;oBAC3D,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,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,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAClE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,qBAAqB,UAAU,mCAAmC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1G,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,UAAU,CACf,IAAI,CAAC,SAAS,CACZ;QACE,OAAO,EAAE,sBAAsB,UAAU,EAAE;QAC3C,YAAY,EACV,8FAA8F;QAChG,QAAQ,EAAE,SAAS;QACnB,YAAY,EAAE;YACZ,aAAa,EAAE,UAAU;SAC1B;KACF,EACD,IAAI,EACJ,CAAC,CACF,CACF,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,MAAM,YAAY,GAAG,UAAU,CAC7B,2CAA2C,OAAO,CAAC,MAAM,OAAO,UAAU,6LAA6L,CACxQ,CAAC;IAEF,4BAA4B;IAC5B,MAAM,UAAU,GAAG,gBAAgB,CACjC,yCAAyC,IAAI,CAAC,GAAG,EAAE,EAAE,EACrD,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,CACzC,CAAC;IAEF,OAAO,uBAAuB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,aAA+C;IAE/C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,aAAmC;IAEnC,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAEjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,UAAU,aAAa,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,QAAQ,CAC3E,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,UAAkB,EAClB,OAAc,EACd,aAAmC;IAEnC,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAClE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,MAAM,IAAI,KAAK,CACb,qBAAqB,UAAU,mCAAmC,UAAU,EAAE,CAC/E,CAAC;IACJ,CAAC;IAED,kBAAkB,GAAG,UAAU,CAAC;IAChC,kBAAkB,GAAG,aAAa,CAAC;IACnC,kBAAkB,GAAG,cAAc,CAAC;IACpC,GAAG,CAAC,IAAI,CACN,OAAO,aAAa,cAAc,cAAc,CAAC,IAAI,KAAK,UAAU,GAAG,CACxE,CAAC;IAEF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CACjC,UAAkB,EAClB,UAAkB;IAElB,OAAO,UAAU,CACf,IAAI,CAAC,SAAS,CACZ;QACE,OAAO,EAAE,sBAAsB,UAAU,KAAK,UAAU,GAAG;QAC3D,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"select-device.js","sourceRoot":"","sources":["../../../src/tools/session/select-device.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-mcp",
|
|
3
3
|
"mcpName": "io.github.appium/appium-mcp",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.78.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"inspect": "npx fastmcp inspect src/index.js",
|
|
38
38
|
"dev:built": "node dist/index.js",
|
|
39
39
|
"inspect:built": "npx @modelcontextprotocol/inspector node dist/index.js",
|
|
40
|
+
"verify:names": "node scripts/verify-names.mjs",
|
|
40
41
|
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
|
|
41
42
|
"test:locators": "NODE_OPTIONS=--experimental-vm-modules jest src/tests/generate-all-locators.test.ts",
|
|
42
43
|
"lint": "eslint src --ext .ts",
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { formatVerificationReport, verifyAppiumMcpNames } from '../dist/plugin.js';
|
|
3
|
+
|
|
4
|
+
const report = verifyAppiumMcpNames();
|
|
5
|
+
const output = formatVerificationReport(report);
|
|
6
|
+
if (report.ok) {
|
|
7
|
+
console.log(output);
|
|
8
|
+
process.exit(0);
|
|
9
|
+
} else {
|
|
10
|
+
console.log(output);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
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.78.1",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "npm",
|
|
10
10
|
"identifier": "appium-mcp",
|
|
11
|
-
"version": "1.
|
|
11
|
+
"version": "1.78.1",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
}
|
package/src/cli/index.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import log from '../logger.js';
|
|
2
|
+
|
|
3
|
+
export async function runCli(
|
|
4
|
+
args: string[] = process.argv.slice(2)
|
|
5
|
+
): Promise<void> {
|
|
6
|
+
const command = args[0];
|
|
7
|
+
if (command === '--help' || command === '-h' || command === 'help') {
|
|
8
|
+
printHelp();
|
|
9
|
+
} else {
|
|
10
|
+
await startServer(args);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function printHelp(): void {
|
|
15
|
+
log.info(`Usage: appium-mcp [command] [options]
|
|
16
|
+
|
|
17
|
+
Options:
|
|
18
|
+
--httpStream Start with httpStream transport
|
|
19
|
+
--port=<port> Port for httpStream transport (default: 8080)
|
|
20
|
+
--help Show this help message`);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async function startServer(args: string[]): Promise<void> {
|
|
24
|
+
const useHttpStream = args.includes('--httpStream');
|
|
25
|
+
const port =
|
|
26
|
+
args.find((arg) => arg.startsWith('--port='))?.split('=')[1] || '8080';
|
|
27
|
+
|
|
28
|
+
log.info('Starting MCP Appium MCP Server...');
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
const { default: server } = await import('../server.js');
|
|
32
|
+
|
|
33
|
+
if (useHttpStream) {
|
|
34
|
+
await server.start({
|
|
35
|
+
transportType: 'httpStream',
|
|
36
|
+
httpStream: {
|
|
37
|
+
endpoint: '/sse',
|
|
38
|
+
port: parseInt(port, 10),
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
log.info(
|
|
43
|
+
`Server started with httpStream transport on http://localhost:${port}/sse`
|
|
44
|
+
);
|
|
45
|
+
log.info('Waiting for client connections...');
|
|
46
|
+
} else {
|
|
47
|
+
await server.start({
|
|
48
|
+
transportType: 'stdio',
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
log.info('Server started with stdio transport');
|
|
52
|
+
log.info('Waiting for client connections...');
|
|
53
|
+
}
|
|
54
|
+
} catch (error: any) {
|
|
55
|
+
log.error('Error starting server:', error);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
package/src/core.ts
CHANGED
|
@@ -7,11 +7,22 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export { createAppiumMcpServer } from './create-server.js';
|
|
9
9
|
export type { CreateAppiumMcpServerOptions } from './create-server.js';
|
|
10
|
-
export {
|
|
10
|
+
export {
|
|
11
|
+
AppiumMcpCore,
|
|
12
|
+
formatVerificationReport,
|
|
13
|
+
McpRegistry,
|
|
14
|
+
PluginManager,
|
|
15
|
+
verifyAppiumMcpNames,
|
|
16
|
+
} from './plugin.js';
|
|
11
17
|
export type {
|
|
12
18
|
AppiumMcpPlugin,
|
|
13
19
|
PluginContext,
|
|
14
20
|
PluginSessionContext,
|
|
15
21
|
ToolCallContext,
|
|
16
22
|
ToolCallResult,
|
|
23
|
+
VerificationDuplicate,
|
|
24
|
+
VerificationDuplicateKind,
|
|
25
|
+
VerificationEntry,
|
|
26
|
+
VerificationReport,
|
|
27
|
+
VerifyAppiumMcpNamesOptions,
|
|
17
28
|
} from './plugin.js';
|
package/src/index.ts
CHANGED
|
@@ -1,45 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import log from './logger.js';
|
|
3
|
+
import { runCli } from './cli/index.js';
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
const args = process.argv.slice(2);
|
|
8
|
-
const useHttpStream = args.includes('--httpStream');
|
|
9
|
-
const port =
|
|
10
|
-
args.find((arg) => arg.startsWith('--port='))?.split('=')[1] || '8080';
|
|
11
|
-
|
|
12
|
-
async function startServer(): Promise<void> {
|
|
13
|
-
log.info('Starting MCP Appium MCP Server...');
|
|
14
|
-
|
|
15
|
-
try {
|
|
16
|
-
if (useHttpStream) {
|
|
17
|
-
await server.start({
|
|
18
|
-
transportType: 'httpStream',
|
|
19
|
-
httpStream: {
|
|
20
|
-
endpoint: '/sse',
|
|
21
|
-
port: parseInt(port, 10),
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
log.info(
|
|
26
|
-
`Server started with httpStream transport on http://localhost:${port}/sse`
|
|
27
|
-
);
|
|
28
|
-
log.info('Waiting for client connections...');
|
|
29
|
-
} else {
|
|
30
|
-
// Start with stdio transport
|
|
31
|
-
await server.start({
|
|
32
|
-
transportType: 'stdio',
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
log.info('Server started with stdio transport');
|
|
36
|
-
log.info('Waiting for client connections...');
|
|
37
|
-
}
|
|
38
|
-
} catch (error: any) {
|
|
39
|
-
log.error('Error starting server:', error);
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Start the server
|
|
45
|
-
void startServer();
|
|
5
|
+
void runCli();
|
package/src/plugin.ts
CHANGED
|
@@ -21,6 +21,9 @@ import {
|
|
|
21
21
|
} from './session-store.js';
|
|
22
22
|
import type { DriverInstance, SessionInfo } from './session-store.js';
|
|
23
23
|
import log from './logger.js';
|
|
24
|
+
import registerTools from './tools/index.js';
|
|
25
|
+
|
|
26
|
+
const CORE_SOURCE = 'appium-mcp core';
|
|
24
27
|
|
|
25
28
|
/**
|
|
26
29
|
* Context passed to plugin lifecycle methods.
|
|
@@ -83,6 +86,37 @@ export interface AppiumMcpPlugin {
|
|
|
83
86
|
destroy?(): Promise<void>;
|
|
84
87
|
}
|
|
85
88
|
|
|
89
|
+
export type VerificationDuplicateKind = 'plugin' | 'tool';
|
|
90
|
+
|
|
91
|
+
export interface VerificationEntry {
|
|
92
|
+
name: string;
|
|
93
|
+
source: string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface VerificationDuplicate {
|
|
97
|
+
kind: VerificationDuplicateKind;
|
|
98
|
+
name: string;
|
|
99
|
+
entries: VerificationEntry[];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface VerificationError {
|
|
103
|
+
source: string;
|
|
104
|
+
message: string;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface VerificationReport {
|
|
108
|
+
ok: boolean;
|
|
109
|
+
pluginCount: number;
|
|
110
|
+
toolCount: number;
|
|
111
|
+
duplicates: VerificationDuplicate[];
|
|
112
|
+
errors: VerificationError[];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export interface VerifyAppiumMcpNamesOptions {
|
|
116
|
+
plugins?: AppiumMcpPlugin[];
|
|
117
|
+
errors?: VerificationError[];
|
|
118
|
+
}
|
|
119
|
+
|
|
86
120
|
type AddToolParam = Parameters<FastMCP['addTool']>[0];
|
|
87
121
|
|
|
88
122
|
type AddPromptParam = Parameters<FastMCP['addPrompt']>[0];
|
|
@@ -91,6 +125,17 @@ type AddResourceParam = Parameters<FastMCP['addResource']>[0];
|
|
|
91
125
|
|
|
92
126
|
type AddResourceTemplateParam = Parameters<FastMCP['addResourceTemplate']>[0];
|
|
93
127
|
|
|
128
|
+
type VerificationToolDef = {
|
|
129
|
+
name: string;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
type CapabilityCollector = {
|
|
133
|
+
addTool(toolDef: VerificationToolDef): void;
|
|
134
|
+
addPrompt(promptDef: unknown): void;
|
|
135
|
+
addResource(resourceDef: unknown): void;
|
|
136
|
+
addResourceTemplate(resourceTemplateDef: unknown): void;
|
|
137
|
+
};
|
|
138
|
+
|
|
94
139
|
export class McpRegistry {
|
|
95
140
|
constructor(private readonly server: FastMCP) {}
|
|
96
141
|
|
|
@@ -366,3 +411,147 @@ export class PluginManager {
|
|
|
366
411
|
};
|
|
367
412
|
}
|
|
368
413
|
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Verify that plugin and tool names are unique across a set of plugins
|
|
417
|
+
* and report any duplicates or registration errors.
|
|
418
|
+
* @param options - Options for verification, including the list of plugins and any pre-existing errors.
|
|
419
|
+
* @returns A report detailing any duplicates or errors found during verification.
|
|
420
|
+
*/
|
|
421
|
+
export function verifyAppiumMcpNames(
|
|
422
|
+
options: VerifyAppiumMcpNamesOptions = {}
|
|
423
|
+
): VerificationReport {
|
|
424
|
+
const plugins = options.plugins ?? [];
|
|
425
|
+
const errors = [...(options.errors ?? [])];
|
|
426
|
+
const duplicates: VerificationDuplicate[] = [];
|
|
427
|
+
const toolEntries: VerificationEntry[] = [];
|
|
428
|
+
let currentSource = CORE_SOURCE;
|
|
429
|
+
|
|
430
|
+
const collector: CapabilityCollector = {
|
|
431
|
+
addTool(toolDef: VerificationToolDef) {
|
|
432
|
+
toolEntries.push({
|
|
433
|
+
name: toolDef.name,
|
|
434
|
+
source: currentSource,
|
|
435
|
+
});
|
|
436
|
+
},
|
|
437
|
+
addPrompt() {},
|
|
438
|
+
addResource() {},
|
|
439
|
+
addResourceTemplate() {},
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
const pluginEntries = plugins.map((plugin) => ({
|
|
443
|
+
name: plugin.name,
|
|
444
|
+
source: `plugin:${plugin.name}@${plugin.version}`,
|
|
445
|
+
}));
|
|
446
|
+
duplicates.push(...findDuplicates('plugin', pluginEntries));
|
|
447
|
+
|
|
448
|
+
const seenPluginNames = new Set<string>();
|
|
449
|
+
const registry = new McpRegistry(collector as never);
|
|
450
|
+
const core = new AppiumMcpCore();
|
|
451
|
+
|
|
452
|
+
for (const plugin of plugins) {
|
|
453
|
+
if (seenPluginNames.has(plugin.name)) {
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
seenPluginNames.add(plugin.name);
|
|
457
|
+
if (typeof plugin.register !== 'function') {
|
|
458
|
+
continue;
|
|
459
|
+
}
|
|
460
|
+
currentSource = `plugin:${plugin.name}`;
|
|
461
|
+
try {
|
|
462
|
+
plugin.register(registry, core);
|
|
463
|
+
} catch (err: unknown) {
|
|
464
|
+
errors.push({
|
|
465
|
+
source: currentSource,
|
|
466
|
+
message: errorMessage(err),
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
currentSource = CORE_SOURCE;
|
|
472
|
+
try {
|
|
473
|
+
withSuppressedRegistrationLogs(() => registerTools(collector as never));
|
|
474
|
+
} catch (err: unknown) {
|
|
475
|
+
errors.push({
|
|
476
|
+
source: currentSource,
|
|
477
|
+
message: errorMessage(err),
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
duplicates.push(...findDuplicates('tool', toolEntries));
|
|
481
|
+
|
|
482
|
+
return {
|
|
483
|
+
ok: duplicates.length === 0 && errors.length === 0,
|
|
484
|
+
pluginCount: new Set(pluginEntries.map((entry) => entry.name)).size,
|
|
485
|
+
toolCount: toolEntries.length,
|
|
486
|
+
duplicates,
|
|
487
|
+
errors,
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
export function formatVerificationReport(report: VerificationReport): string {
|
|
492
|
+
const lines = [
|
|
493
|
+
`Checked ${report.pluginCount} plugin name(s) and ${report.toolCount} tool name(s).`,
|
|
494
|
+
];
|
|
495
|
+
|
|
496
|
+
if (report.ok) {
|
|
497
|
+
lines.push('No duplicate plugin or tool names found.');
|
|
498
|
+
return lines.join('\n');
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
if (report.duplicates.length > 0) {
|
|
502
|
+
lines.push('Duplicate names found:');
|
|
503
|
+
for (const duplicate of report.duplicates) {
|
|
504
|
+
const sources = duplicate.entries
|
|
505
|
+
.map((entry) => ` - ${entry.source}`)
|
|
506
|
+
.join('\n');
|
|
507
|
+
lines.push(` ${duplicate.kind}: ${duplicate.name}\n${sources}`);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
if (report.errors.length > 0) {
|
|
512
|
+
lines.push('Registration/load errors found:');
|
|
513
|
+
for (const error of report.errors) {
|
|
514
|
+
lines.push(` ${error.source}: ${error.message}`);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
return lines.join('\n');
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
function withSuppressedRegistrationLogs(fn: () => void): void {
|
|
522
|
+
const mutableLog = log as typeof log & { info: (...args: unknown[]) => void };
|
|
523
|
+
const originalInfo = mutableLog.info;
|
|
524
|
+
mutableLog.info = () => {};
|
|
525
|
+
try {
|
|
526
|
+
fn();
|
|
527
|
+
} finally {
|
|
528
|
+
mutableLog.info = originalInfo;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
function findDuplicates(
|
|
533
|
+
kind: VerificationDuplicateKind,
|
|
534
|
+
entries: VerificationEntry[]
|
|
535
|
+
): VerificationDuplicate[] {
|
|
536
|
+
const byName = new Map<string, VerificationEntry[]>();
|
|
537
|
+
for (const entry of entries) {
|
|
538
|
+
const existing = byName.get(entry.name) ?? [];
|
|
539
|
+
existing.push(entry);
|
|
540
|
+
byName.set(entry.name, existing);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
return Array.from(byName.entries())
|
|
544
|
+
.filter(([, duplicateEntries]) => duplicateEntries.length > 1)
|
|
545
|
+
.map(([name, duplicateEntries]) => ({
|
|
546
|
+
kind,
|
|
547
|
+
name,
|
|
548
|
+
entries: duplicateEntries,
|
|
549
|
+
}));
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
function errorMessage(err: unknown): string {
|
|
553
|
+
if (err instanceof Error) {
|
|
554
|
+
return err.message;
|
|
555
|
+
}
|
|
556
|
+
return String(err);
|
|
557
|
+
}
|
|
Binary file
|
|
@@ -246,7 +246,7 @@ function formatIOSSelectionResponse(
|
|
|
246
246
|
{
|
|
247
247
|
message: `✅ Device selected: ${deviceName} (${deviceUdid})`,
|
|
248
248
|
instructions:
|
|
249
|
-
'🚀 You can now call the prepare_ios_simulator tool to boot and setup WDA on the simulator.',
|
|
249
|
+
'🚀 You can now call the prepare_ios_simulator tool to boot and setup WDA on the simulator or the appium_prepare_ios_real_device tool to setup WDA on ios real device.',
|
|
250
250
|
platform: 'ios',
|
|
251
251
|
capabilities: {
|
|
252
252
|
'appium:udid': deviceUdid,
|