appium-mcp 1.83.0 → 1.84.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.
Files changed (180) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/create-server.d.ts.map +1 -1
  3. package/dist/create-server.js +4 -0
  4. package/dist/create-server.js.map +1 -1
  5. package/dist/server.d.ts.map +1 -1
  6. package/dist/server.js +7 -4
  7. package/dist/server.js.map +1 -1
  8. package/package.json +9 -19
  9. package/server.json +2 -2
  10. package/src/create-server.ts +4 -0
  11. package/src/server.ts +9 -4
  12. package/dist/scripts/eval-documentation-rag.d.ts +0 -50
  13. package/dist/scripts/eval-documentation-rag.d.ts.map +0 -1
  14. package/dist/scripts/eval-documentation-rag.js +0 -287
  15. package/dist/scripts/eval-documentation-rag.js.map +0 -1
  16. package/dist/scripts/generate-embeddings-cache.d.ts +0 -13
  17. package/dist/scripts/generate-embeddings-cache.d.ts.map +0 -1
  18. package/dist/scripts/generate-embeddings-cache.js +0 -24
  19. package/dist/scripts/generate-embeddings-cache.js.map +0 -1
  20. package/dist/scripts/rag-eval-dataset.json +0 -516
  21. package/dist/scripts/simple-index-documentation.d.ts +0 -21
  22. package/dist/scripts/simple-index-documentation.d.ts.map +0 -1
  23. package/dist/scripts/simple-index-documentation.js +0 -77
  24. package/dist/scripts/simple-index-documentation.js.map +0 -1
  25. package/dist/scripts/simple-query-documentation.d.ts +0 -13
  26. package/dist/scripts/simple-query-documentation.d.ts.map +0 -1
  27. package/dist/scripts/simple-query-documentation.js +0 -52
  28. package/dist/scripts/simple-query-documentation.js.map +0 -1
  29. package/dist/tests/__mocks__/@appium/support.d.ts +0 -92
  30. package/dist/tests/__mocks__/@appium/support.d.ts.map +0 -1
  31. package/dist/tests/__mocks__/@appium/support.js +0 -66
  32. package/dist/tests/__mocks__/@appium/support.js.map +0 -1
  33. package/dist/tests/benchmark_model/benchmark_model.d.ts +0 -3
  34. package/dist/tests/benchmark_model/benchmark_model.d.ts.map +0 -1
  35. package/dist/tests/benchmark_model/benchmark_model.js +0 -617
  36. package/dist/tests/benchmark_model/benchmark_model.js.map +0 -1
  37. package/dist/tests/create-server.test.d.ts +0 -2
  38. package/dist/tests/create-server.test.d.ts.map +0 -1
  39. package/dist/tests/create-server.test.js +0 -578
  40. package/dist/tests/create-server.test.js.map +0 -1
  41. package/dist/tests/generate-all-locators.test.d.ts +0 -2
  42. package/dist/tests/generate-all-locators.test.d.ts.map +0 -1
  43. package/dist/tests/generate-all-locators.test.js +0 -136
  44. package/dist/tests/generate-all-locators.test.js.map +0 -1
  45. package/dist/tests/persistence.test.d.ts +0 -2
  46. package/dist/tests/persistence.test.d.ts.map +0 -1
  47. package/dist/tests/persistence.test.js +0 -116
  48. package/dist/tests/persistence.test.js.map +0 -1
  49. package/dist/tests/plugin.test.d.ts +0 -2
  50. package/dist/tests/plugin.test.d.ts.map +0 -1
  51. package/dist/tests/plugin.test.js +0 -399
  52. package/dist/tests/plugin.test.js.map +0 -1
  53. package/dist/tests/policy.test.d.ts +0 -2
  54. package/dist/tests/policy.test.d.ts.map +0 -1
  55. package/dist/tests/policy.test.js +0 -44
  56. package/dist/tests/policy.test.js.map +0 -1
  57. package/dist/tests/screenshot.test.d.ts +0 -2
  58. package/dist/tests/screenshot.test.d.ts.map +0 -1
  59. package/dist/tests/screenshot.test.js +0 -243
  60. package/dist/tests/screenshot.test.js.map +0 -1
  61. package/dist/tests/session-store.test.d.ts +0 -2
  62. package/dist/tests/session-store.test.d.ts.map +0 -1
  63. package/dist/tests/session-store.test.js +0 -459
  64. package/dist/tests/session-store.test.js.map +0 -1
  65. package/dist/tests/test-setup-wda.d.ts +0 -2
  66. package/dist/tests/test-setup-wda.d.ts.map +0 -1
  67. package/dist/tests/test-setup-wda.js +0 -199
  68. package/dist/tests/test-setup-wda.js.map +0 -1
  69. package/dist/tests/tools/documentation/appium-skills.test.d.ts +0 -2
  70. package/dist/tests/tools/documentation/appium-skills.test.d.ts.map +0 -1
  71. package/dist/tests/tools/documentation/appium-skills.test.js +0 -106
  72. package/dist/tests/tools/documentation/appium-skills.test.js.map +0 -1
  73. package/dist/tests/tools/documentation/plugin.test.d.ts +0 -2
  74. package/dist/tests/tools/documentation/plugin.test.d.ts.map +0 -1
  75. package/dist/tests/tools/documentation/plugin.test.js +0 -34
  76. package/dist/tests/tools/documentation/plugin.test.js.map +0 -1
  77. package/dist/tests/tools/documentation/simple-pdf-indexer.test.d.ts +0 -2
  78. package/dist/tests/tools/documentation/simple-pdf-indexer.test.d.ts.map +0 -1
  79. package/dist/tests/tools/documentation/simple-pdf-indexer.test.js +0 -46
  80. package/dist/tests/tools/documentation/simple-pdf-indexer.test.js.map +0 -1
  81. package/dist/tests/tools/evidence.test.d.ts +0 -2
  82. package/dist/tests/tools/evidence.test.d.ts.map +0 -1
  83. package/dist/tests/tools/evidence.test.js +0 -158
  84. package/dist/tests/tools/evidence.test.js.map +0 -1
  85. package/dist/tests/tools/gestures/ai-element.test.d.ts +0 -2
  86. package/dist/tests/tools/gestures/ai-element.test.d.ts.map +0 -1
  87. package/dist/tests/tools/gestures/ai-element.test.js +0 -114
  88. package/dist/tests/tools/gestures/ai-element.test.js.map +0 -1
  89. package/dist/tests/tools/gestures/swipe-scroll.test.d.ts +0 -2
  90. package/dist/tests/tools/gestures/swipe-scroll.test.d.ts.map +0 -1
  91. package/dist/tests/tools/gestures/swipe-scroll.test.js +0 -63
  92. package/dist/tests/tools/gestures/swipe-scroll.test.js.map +0 -1
  93. package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.d.ts +0 -2
  94. package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.d.ts.map +0 -1
  95. package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.js +0 -94
  96. package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.js.map +0 -1
  97. package/dist/tests/tools/llm-wording.test.d.ts +0 -2
  98. package/dist/tests/tools/llm-wording.test.d.ts.map +0 -1
  99. package/dist/tests/tools/llm-wording.test.js +0 -89
  100. package/dist/tests/tools/llm-wording.test.js.map +0 -1
  101. package/dist/tests/tools/session/device-info.test.d.ts +0 -2
  102. package/dist/tests/tools/session/device-info.test.d.ts.map +0 -1
  103. package/dist/tests/tools/session/device-info.test.js +0 -144
  104. package/dist/tests/tools/session/device-info.test.js.map +0 -1
  105. package/dist/tests/tools/session/file-transfer.test.d.ts +0 -2
  106. package/dist/tests/tools/session/file-transfer.test.d.ts.map +0 -1
  107. package/dist/tests/tools/session/file-transfer.test.js +0 -98
  108. package/dist/tests/tools/session/file-transfer.test.js.map +0 -1
  109. package/dist/tests/tools/session/session.test.d.ts +0 -2
  110. package/dist/tests/tools/session/session.test.d.ts.map +0 -1
  111. package/dist/tests/tools/session/session.test.js +0 -413
  112. package/dist/tests/tools/session/session.test.js.map +0 -1
  113. package/dist/tests/utils/collection.test.d.ts +0 -2
  114. package/dist/tests/utils/collection.test.d.ts.map +0 -1
  115. package/dist/tests/utils/collection.test.js +0 -87
  116. package/dist/tests/utils/collection.test.js.map +0 -1
  117. package/dist/tests/utils/paths.test.d.ts +0 -2
  118. package/dist/tests/utils/paths.test.d.ts.map +0 -1
  119. package/dist/tests/utils/paths.test.js +0 -22
  120. package/dist/tests/utils/paths.test.js.map +0 -1
  121. package/dist/tests/verify.test.d.ts +0 -2
  122. package/dist/tests/verify.test.d.ts.map +0 -1
  123. package/dist/tests/verify.test.js +0 -148
  124. package/dist/tests/verify.test.js.map +0 -1
  125. package/dist/tests/vision-finder.test.d.ts +0 -10
  126. package/dist/tests/vision-finder.test.d.ts.map +0 -1
  127. package/dist/tests/vision-finder.test.js +0 -420
  128. package/dist/tests/vision-finder.test.js.map +0 -1
  129. package/dist/tools/documentation/answer-appium.d.ts +0 -8
  130. package/dist/tools/documentation/answer-appium.d.ts.map +0 -1
  131. package/dist/tools/documentation/answer-appium.js +0 -38
  132. package/dist/tools/documentation/answer-appium.js.map +0 -1
  133. package/dist/tools/documentation/appium-skills.d.ts +0 -5
  134. package/dist/tools/documentation/appium-skills.d.ts.map +0 -1
  135. package/dist/tools/documentation/appium-skills.js +0 -168
  136. package/dist/tools/documentation/appium-skills.js.map +0 -1
  137. package/dist/tools/documentation/index.d.ts +0 -29
  138. package/dist/tools/documentation/index.d.ts.map +0 -1
  139. package/dist/tools/documentation/index.js +0 -66
  140. package/dist/tools/documentation/index.js.map +0 -1
  141. package/dist/tools/documentation/markdown-header-splitter.d.ts +0 -32
  142. package/dist/tools/documentation/markdown-header-splitter.d.ts.map +0 -1
  143. package/dist/tools/documentation/markdown-header-splitter.js +0 -180
  144. package/dist/tools/documentation/markdown-header-splitter.js.map +0 -1
  145. package/dist/tools/documentation/plugin.d.ts +0 -14
  146. package/dist/tools/documentation/plugin.d.ts.map +0 -1
  147. package/dist/tools/documentation/plugin.js +0 -19
  148. package/dist/tools/documentation/plugin.js.map +0 -1
  149. package/dist/tools/documentation/reasoning-rag.d.ts +0 -89
  150. package/dist/tools/documentation/reasoning-rag.d.ts.map +0 -1
  151. package/dist/tools/documentation/reasoning-rag.js +0 -282
  152. package/dist/tools/documentation/reasoning-rag.js.map +0 -1
  153. package/dist/tools/documentation/sentence-transformers-embeddings.d.ts +0 -40
  154. package/dist/tools/documentation/sentence-transformers-embeddings.d.ts.map +0 -1
  155. package/dist/tools/documentation/sentence-transformers-embeddings.js +0 -119
  156. package/dist/tools/documentation/sentence-transformers-embeddings.js.map +0 -1
  157. package/dist/tools/documentation/simple-pdf-indexer.d.ts +0 -47
  158. package/dist/tools/documentation/simple-pdf-indexer.d.ts.map +0 -1
  159. package/dist/tools/documentation/simple-pdf-indexer.js +0 -572
  160. package/dist/tools/documentation/simple-pdf-indexer.js.map +0 -1
  161. package/dist/tools/documentation/uploads/documents.json +0 -1
  162. package/dist/tools/documentation/uploads/embeddings-Xenova-bge-small-en-v1.5.json +0 -1
  163. package/scripts/setup-submodules-sparse.sh +0 -53
  164. package/scripts/update-submodules.sh +0 -14
  165. package/scripts/zip-assets.mjs +0 -55
  166. package/src/resources/submodules.zip +0 -0
  167. package/src/scripts/eval-documentation-rag.ts +0 -433
  168. package/src/scripts/generate-embeddings-cache.ts +0 -24
  169. package/src/scripts/rag-eval-dataset.json +0 -516
  170. package/src/scripts/simple-index-documentation.ts +0 -93
  171. package/src/scripts/simple-query-documentation.ts +0 -61
  172. package/src/tools/documentation/answer-appium.ts +0 -47
  173. package/src/tools/documentation/appium-skills.ts +0 -244
  174. package/src/tools/documentation/index.ts +0 -99
  175. package/src/tools/documentation/markdown-header-splitter.ts +0 -209
  176. package/src/tools/documentation/plugin.ts +0 -21
  177. package/src/tools/documentation/reasoning-rag.ts +0 -438
  178. package/src/tools/documentation/sentence-transformers-embeddings.ts +0 -152
  179. package/src/tools/documentation/simple-pdf-indexer.ts +0 -755
  180. package/src/tools/documentation/uploads/documents.json +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [1.84.1](https://github.com/appium/appium-mcp/compare/v1.84.0...v1.84.1) (2026-06-09)
2
+
3
+ ### Miscellaneous Chores
4
+
5
+ * drop dist/tests from package as well ([#393](https://github.com/appium/appium-mcp/issues/393)) ([6ff2d8e](https://github.com/appium/appium-mcp/commit/6ff2d8e061c2b0a1fbfa11db8dbc885359280e64))
6
+
7
+ ## [1.84.0](https://github.com/appium/appium-mcp/compare/v1.83.0...v1.84.0) (2026-06-08)
8
+
9
+ ### Features
10
+
11
+ * extratc docs stuff into a new package ([#384](https://github.com/appium/appium-mcp/issues/384)) ([1daddb3](https://github.com/appium/appium-mcp/commit/1daddb3563d4f646e924623889db5b8b3eab7ce9))
12
+
1
13
  ## [1.83.0](https://github.com/appium/appium-mcp/compare/v1.82.2...v1.83.0) (2026-06-08)
2
14
 
3
15
  ### Features
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAalE,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAE5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;IAEhD;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAQD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAkKT"}
1
+ {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAalE,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAE5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;IAEhD;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAQD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAsKT"}
@@ -51,6 +51,10 @@ export function createAppiumMcpServer(options = {}) {
51
51
  name: serverName,
52
52
  version: serverVersion,
53
53
  instructions,
54
+ // Appium MCP will not allow client to ask the local workspace/project folders.
55
+ roots: {
56
+ enabled: false,
57
+ },
54
58
  });
55
59
  installPolicy(server, policy);
56
60
  // -------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,iEAEV,CAAC;AACH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,iEAAqC,CAAC;AAClD,eAAe,MAAM,CAAC"}
package/dist/server.js CHANGED
@@ -1,7 +1,10 @@
1
1
  import { createAppiumMcpServer } from './create-server.js';
2
- import { AppiumDocumentation } from './tools/documentation/plugin.js';
3
- const server = createAppiumMcpServer({
4
- plugins: [new AppiumDocumentation()],
5
- });
2
+ const plugins = [];
3
+ try {
4
+ const { AppiumDocumentation } = await import('@appium/mcp-documentation');
5
+ plugins.push(new AppiumDocumentation());
6
+ }
7
+ catch (_err) { }
8
+ const server = createAppiumMcpServer({ plugins });
6
9
  export default server;
7
10
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,MAAM,MAAM,GAAG,qBAAqB,CAAC;IACnC,OAAO,EAAE,CAAC,IAAI,mBAAmB,EAAE,CAAC;CACrC,CAAC,CAAC;AACH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,OAAO,GAAsB,EAAE,CAAC;AAEtC,IAAI,CAAC;IACH,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;AAC1C,CAAC;AAAC,OAAO,IAAI,EAAE,CAAC,CAAA,CAAC;AAEjB,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAClD,eAAe,MAAM,CAAC"}
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.83.0",
4
+ "version": "1.84.1",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",
@@ -27,8 +27,7 @@
27
27
  "appium-mcp": "dist/index.js"
28
28
  },
29
29
  "scripts": {
30
- "build": "rimraf dist tsconfig.tsbuildinfo && tsc -b && chmod +x dist/index.js && npm run copy-docs",
31
- "copy-docs": "mkdir -p dist/tools/documentation/uploads dist/scripts && cp -f src/tools/documentation/uploads/documents.json dist/tools/documentation/uploads/documents.json 2>/dev/null || true && cp -f src/tools/documentation/uploads/embeddings-*.json dist/tools/documentation/uploads/ 2>/dev/null || true && cp -f src/scripts/rag-eval-dataset.json dist/scripts/rag-eval-dataset.json 2>/dev/null || true",
30
+ "build": "rimraf dist tsconfig.tsbuildinfo && tsc -b && chmod +x dist/index.js",
32
31
  "start": "node dist/index.js",
33
32
  "start:stdio": "node dist/index.js",
34
33
  "start:httpStream": "node dist/index.js --httpStream",
@@ -45,27 +44,17 @@
45
44
  "format": "prettier --write \"src/**/*.{ts,js,json}\"",
46
45
  "format:check": "prettier --check \"src/**/*.{ts,js,json}\"",
47
46
  "check": "npm run lint && npm run format:check",
48
- "index-docs": "node dist/scripts/simple-index-documentation.js",
49
- "query-docs": "node dist/scripts/simple-query-documentation.js",
50
- "eval-docs": "node dist/scripts/eval-documentation-rag.js",
51
- "generate-cache": "node dist/scripts/generate-embeddings-cache.js",
52
- "prepublishOnly": "npm run build && npm run generate-cache",
47
+ "prepublishOnly": "npm run build",
53
48
  "sync-version": "node scripts/sync-version.mjs",
54
- "version": "npm run sync-version",
55
- "zip-assets": "node scripts/zip-assets.mjs zip",
56
- "unzip-assets": "node scripts/zip-assets.mjs unzip",
57
- "preinstall": "node scripts/zip-assets.mjs unzip"
49
+ "version": "npm run sync-version"
58
50
  },
59
51
  "author": "",
60
52
  "license": "Apache-2.0",
61
53
  "description": "Intelligent MCP server providing AI assistants with powerful tools and resources for Appium mobile automation",
62
54
  "dependencies": {
55
+ "@appium/mcp-documentation": "^1.0.1",
63
56
  "@appium/support": "^7.0.2",
64
- "@langchain/classic": "^1.0.10",
65
- "@langchain/core": "^1.1.17",
66
- "@langchain/textsplitters": "^1.0.1",
67
57
  "@modelcontextprotocol/sdk": "^1.22.0",
68
- "@xenova/transformers": "^2.17.2",
69
58
  "@xmldom/xmldom": "^0.9.8",
70
59
  "appium-adb": "^15.0.0",
71
60
  "appium-ios-device": "^3.1.0",
@@ -73,18 +62,17 @@
73
62
  "appium-webdriveragent": "^12.1.1",
74
63
  "appium-xcuitest-driver": "^11.0.0",
75
64
  "applesign": "^5.0.0",
76
- "fast-xml-parser": "^5.2.3",
77
65
  "fastmcp": "^4.0.0",
78
66
  "ios-mobileprovision-finder": "^1.2.1",
79
- "langchain": "^1.1.6",
80
67
  "node-simctl": "^8.0.4",
81
- "rimraf": "^6.0.1",
68
+ "lru-cache": "^11.5.0",
82
69
  "webdriver": "^9.23.0",
83
70
  "xpath": "^0.0.34",
84
71
  "zod": "^4.3.6"
85
72
  },
86
73
  "devDependencies": {
87
74
  "@appium/eslint-config-appium-ts": "^3.0.0",
75
+ "@appium/tsconfig": "^1.1.2",
88
76
  "@jest/globals": "^30.2.0",
89
77
  "@semantic-release/changelog": "^6.0.3",
90
78
  "@semantic-release/git": "^10.0.1",
@@ -95,6 +83,7 @@
95
83
  "jest": "^30.2.0",
96
84
  "lint-staged": "^17.0.2",
97
85
  "prettier": "^3.5.3",
86
+ "rimraf": "^6.0.1",
98
87
  "semantic-release": "^25.0.2",
99
88
  "ts-node": "^10.9.2",
100
89
  "typescript": "^6.0.2"
@@ -104,6 +93,7 @@
104
93
  "src",
105
94
  "!src/tests",
106
95
  "dist",
96
+ "!dist/tests",
107
97
  "CHANGELOG.md",
108
98
  "README.md",
109
99
  "LICENSE",
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.83.0",
6
+ "version": "1.84.1",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "appium-mcp",
11
- "version": "1.83.0",
11
+ "version": "1.84.1",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  }
@@ -103,6 +103,10 @@ export function createAppiumMcpServer(
103
103
  name: serverName,
104
104
  version: serverVersion,
105
105
  instructions,
106
+ // Appium MCP will not allow client to ask the local workspace/project folders.
107
+ roots: {
108
+ enabled: false,
109
+ },
106
110
  });
107
111
 
108
112
  installPolicy(server, policy);
package/src/server.ts CHANGED
@@ -1,7 +1,12 @@
1
+ import type { AppiumMcpPlugin } from './core.js';
1
2
  import { createAppiumMcpServer } from './create-server.js';
2
- import { AppiumDocumentation } from './tools/documentation/plugin.js';
3
3
 
4
- const server = createAppiumMcpServer({
5
- plugins: [new AppiumDocumentation()],
6
- });
4
+ const plugins: AppiumMcpPlugin[] = [];
5
+
6
+ try {
7
+ const { AppiumDocumentation } = await import('@appium/mcp-documentation');
8
+ plugins.push(new AppiumDocumentation());
9
+ } catch (_err) {}
10
+
11
+ const server = createAppiumMcpServer({ plugins });
7
12
  export default server;
@@ -1,50 +0,0 @@
1
- /**
2
- * Answer-grounded RAG eval for the Appium documentation tool.
3
- *
4
- * Runs the documentation_query retrieval pipeline against a fixed set of
5
- * realistic queries and asks the only question that matters downstream:
6
- * "did the answer text actually land in the chunks an LLM would see?"
7
- *
8
- * What we measure:
9
- *
10
- * 1. answerSpanRecall@K
11
- * For each query, the dataset declares short verbatim phrases lifted
12
- * from the docs (`answerSpans`). We concatenate the top-K retrieved
13
- * chunks and check what fraction of the spans appears in that text.
14
- * "anyOf" semantics: a query that finds at least one span counts as a
15
- * hit. Spans are 30-140 chars and chosen so any reasonable chunk
16
- * containing the answer will include them, regardless of chunk
17
- * boundaries -- so the metric is splitter-neutral.
18
- *
19
- * 2. hit@{1,3,5,10}
20
- * Did any chunk at rank <= K carry any answerSpan? Direct measure of
21
- * "does the LLM see the answer" at different context budgets.
22
- *
23
- * 3. MRR
24
- * Mean reciprocal rank of the *first* chunk that carries an answerSpan.
25
- * MRR-equivalent on content, not on file paths -- a chunk from the
26
- * right file but wrong section is worth nothing here.
27
- *
28
- * 4. contextEfficiency
29
- * For queries we hit, 1000 * spansCovered / totalChars(topK). Spans-per-
30
- * kchar density. Low = lots of noise around the answer.
31
- *
32
- * 5. fileRecall@{5,10} (diagnostic only)
33
- * Did the right *file* appear in top-K? Kept so we can spot the
34
- * "right-file wrong-chunk" failure mode (right file present but no
35
- * answerSpan landed).
36
- *
37
- * Match semantics: lowercase + collapse whitespace, then substring check.
38
- *
39
- * Usage (after `npm run build`):
40
- * node dist/scripts/eval-documentation-rag.js \
41
- * [--top-k=10] [--label=NAME] [--quiet] [--no-save]
42
- *
43
- * --top-k=N number of chunks to retrieve & evaluate (default 10)
44
- * --label=N label written into the saved run, useful for comparing
45
- * index variants (e.g. --label=before, --label=after)
46
- * --quiet suppress the per-query log lines and table
47
- * --no-save don't persist results JSON to disk
48
- */
49
- export {};
50
- //# sourceMappingURL=eval-documentation-rag.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eval-documentation-rag.d.ts","sourceRoot":"","sources":["../../src/scripts/eval-documentation-rag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG"}
@@ -1,287 +0,0 @@
1
- /**
2
- * Answer-grounded RAG eval for the Appium documentation tool.
3
- *
4
- * Runs the documentation_query retrieval pipeline against a fixed set of
5
- * realistic queries and asks the only question that matters downstream:
6
- * "did the answer text actually land in the chunks an LLM would see?"
7
- *
8
- * What we measure:
9
- *
10
- * 1. answerSpanRecall@K
11
- * For each query, the dataset declares short verbatim phrases lifted
12
- * from the docs (`answerSpans`). We concatenate the top-K retrieved
13
- * chunks and check what fraction of the spans appears in that text.
14
- * "anyOf" semantics: a query that finds at least one span counts as a
15
- * hit. Spans are 30-140 chars and chosen so any reasonable chunk
16
- * containing the answer will include them, regardless of chunk
17
- * boundaries -- so the metric is splitter-neutral.
18
- *
19
- * 2. hit@{1,3,5,10}
20
- * Did any chunk at rank <= K carry any answerSpan? Direct measure of
21
- * "does the LLM see the answer" at different context budgets.
22
- *
23
- * 3. MRR
24
- * Mean reciprocal rank of the *first* chunk that carries an answerSpan.
25
- * MRR-equivalent on content, not on file paths -- a chunk from the
26
- * right file but wrong section is worth nothing here.
27
- *
28
- * 4. contextEfficiency
29
- * For queries we hit, 1000 * spansCovered / totalChars(topK). Spans-per-
30
- * kchar density. Low = lots of noise around the answer.
31
- *
32
- * 5. fileRecall@{5,10} (diagnostic only)
33
- * Did the right *file* appear in top-K? Kept so we can spot the
34
- * "right-file wrong-chunk" failure mode (right file present but no
35
- * answerSpan landed).
36
- *
37
- * Match semantics: lowercase + collapse whitespace, then substring check.
38
- *
39
- * Usage (after `npm run build`):
40
- * node dist/scripts/eval-documentation-rag.js \
41
- * [--top-k=10] [--label=NAME] [--quiet] [--no-save]
42
- *
43
- * --top-k=N number of chunks to retrieve & evaluate (default 10)
44
- * --label=N label written into the saved run, useful for comparing
45
- * index variants (e.g. --label=before, --label=after)
46
- * --quiet suppress the per-query log lines and table
47
- * --no-save don't persist results JSON to disk
48
- */
49
- import * as fs from 'node:fs';
50
- import * as path from 'node:path';
51
- import { fileURLToPath } from 'node:url';
52
- import { queryVectorStore } from '../tools/documentation/simple-pdf-indexer.js';
53
- // -- arg parsing ----------------------------------------------------------
54
- const __filename = fileURLToPath(import.meta.url);
55
- const __dirname = path.dirname(__filename);
56
- const args = process.argv.slice(2);
57
- const flagSet = new Set(args);
58
- const QUIET = flagSet.has('--quiet');
59
- const NO_SAVE = flagSet.has('--no-save');
60
- function flagValue(name, dflt) {
61
- const a = args.find((x) => x.startsWith(`${name}=`));
62
- return a ? a.split('=').slice(1).join('=') : dflt;
63
- }
64
- const TOP_K = Number(flagValue('--top-k', '10'));
65
- const LABEL = flagValue('--label', 'default');
66
- // -- paths ----------------------------------------------------------------
67
- function resolveDatasetPath() {
68
- const candidates = [
69
- path.resolve(__dirname, 'rag-eval-dataset.json'),
70
- path.resolve(__dirname, '../../src/scripts/rag-eval-dataset.json'),
71
- ];
72
- for (const p of candidates) {
73
- if (fs.existsSync(p)) {
74
- return p;
75
- }
76
- }
77
- throw new Error(`rag-eval-dataset.json not found in: ${candidates.join(', ')}`);
78
- }
79
- function resolveResultsDir() {
80
- const dir = path.resolve(__dirname, '../../src/scripts/eval-results');
81
- fs.mkdirSync(dir, { recursive: true });
82
- return dir;
83
- }
84
- // -- matching helpers -----------------------------------------------------
85
- function normalize(s) {
86
- return s.toLowerCase().replace(/\s+/g, ' ').trim();
87
- }
88
- function chunkContainsSpan(chunkText, span) {
89
- return normalize(chunkText).includes(normalize(span));
90
- }
91
- function endsWithExpected(retrievedRelPath, expected) {
92
- return retrievedRelPath === expected || retrievedRelPath.endsWith(expected);
93
- }
94
- // -- per-query evaluation -------------------------------------------------
95
- function evaluateQuery(q, chunks) {
96
- const hitRanks = [];
97
- const spansCovered = new Set();
98
- for (const chunk of chunks) {
99
- let chunkHadHit = false;
100
- for (const span of q.answerSpans) {
101
- if (chunkContainsSpan(chunk.text, span)) {
102
- spansCovered.add(span);
103
- chunkHadHit = true;
104
- }
105
- }
106
- if (chunkHadHit) {
107
- hitRanks.push(chunk.rank);
108
- }
109
- }
110
- const firstHitRank = hitRanks.length > 0 ? hitRanks[0] : null;
111
- const spansMissing = q.answerSpans.filter((s) => !spansCovered.has(s));
112
- return {
113
- hitRanks,
114
- firstHitRank,
115
- spansCovered: [...spansCovered],
116
- spansMissing,
117
- };
118
- }
119
- // -- aggregation ----------------------------------------------------------
120
- function aggregate(results) {
121
- if (results.length === 0) {
122
- return {
123
- count: 0,
124
- answerSpanRecall: 0,
125
- hitAnyAt1: 0,
126
- hitAnyAt3: 0,
127
- hitAnyAt5: 0,
128
- hitAnyAt10: 0,
129
- mrr: 0,
130
- contextEfficiency: 0,
131
- fileRecallAt5: 0,
132
- fileRecallAt10: 0,
133
- };
134
- }
135
- const n = results.length;
136
- const mean = (xs) => xs.reduce((a, b) => a + b, 0) / xs.length;
137
- const hitResults = results.filter((r) => r.hitAnyAt10 === 1);
138
- return {
139
- count: n,
140
- answerSpanRecall: mean(results.map((r) => r.answerSpanRecall)),
141
- hitAnyAt1: mean(results.map((r) => r.hitAnyAt1)),
142
- hitAnyAt3: mean(results.map((r) => r.hitAnyAt3)),
143
- hitAnyAt5: mean(results.map((r) => r.hitAnyAt5)),
144
- hitAnyAt10: mean(results.map((r) => r.hitAnyAt10)),
145
- mrr: mean(results.map((r) => r.reciprocalRank)),
146
- contextEfficiency: hitResults.length
147
- ? mean(hitResults.map((r) => r.contextEfficiency))
148
- : 0,
149
- fileRecallAt5: mean(results.map((r) => r.fileRecallAt5)),
150
- fileRecallAt10: mean(results.map((r) => r.fileRecallAt10)),
151
- };
152
- }
153
- function fmt(n, dp = 3) {
154
- return n.toFixed(dp);
155
- }
156
- function printAggregate(label, m) {
157
- const tag = `${label} (n=${m.count})`.padEnd(20);
158
- console.log(`${tag} spanRecall=${fmt(m.answerSpanRecall)} hit@1=${fmt(m.hitAnyAt1)} hit@3=${fmt(m.hitAnyAt3)} hit@5=${fmt(m.hitAnyAt5)} hit@10=${fmt(m.hitAnyAt10)} MRR=${fmt(m.mrr)} ctxEff=${fmt(m.contextEfficiency, 2)} fileR@5=${fmt(m.fileRecallAt5)}`);
159
- }
160
- function printPerQueryTable(results) {
161
- const header = 'id | diff | fhr | spans | hit@5 | unique | sources';
162
- const sep = '-'.repeat(110);
163
- console.log(sep);
164
- console.log(header);
165
- console.log(sep);
166
- for (const r of results) {
167
- const fhr = r.firstHitRank === null ? ' - ' : String(r.firstHitRank).padStart(3, ' ');
168
- const spans = `${r.spansCovered.length}/${r.answerSpans.length}`;
169
- const matched = r.retrievedSources[0]
170
- ? r.retrievedSources.slice(0, 2).join(', ')
171
- : '(empty)';
172
- console.log(`${r.id.padEnd(4)} | ${r.difficulty.padEnd(6)} | ${fhr} | ${spans.padEnd(6)} | ${String(r.hitAnyAt5).padEnd(5)} | ${String(r.uniqueFiles).padEnd(6)} | ${matched}`);
173
- }
174
- console.log(sep);
175
- }
176
- // -- main -----------------------------------------------------------------
177
- async function runEval() {
178
- const datasetPath = resolveDatasetPath();
179
- const dataset = JSON.parse(fs.readFileSync(datasetPath, 'utf-8'));
180
- console.log(`\n=== Appium RAG eval (answer-grounded) ===`);
181
- console.log(`Dataset: ${datasetPath}`);
182
- console.log(`Queries: ${dataset.queries.length} topK: ${TOP_K} label: ${LABEL}\n`);
183
- const perQuery = [];
184
- for (const q of dataset.queries) {
185
- const docs = await queryVectorStore(q.query, TOP_K);
186
- const chunks = docs.map((d, i) => ({
187
- rank: i + 1,
188
- text: d.pageContent,
189
- source: d.metadata?.relativePath ??
190
- d.metadata?.filename,
191
- charCount: d.pageContent.length,
192
- }));
193
- const retrievedSources = chunks
194
- .map((c) => c.source)
195
- .filter((s) => !!s);
196
- const topKChars = chunks.reduce((a, c) => a + c.charCount, 0);
197
- const uniqueFiles = new Set(retrievedSources).size;
198
- const { hitRanks, firstHitRank, spansCovered, spansMissing } = evaluateQuery(q, chunks);
199
- const answerSpanRecall = q.answerSpans.length === 0
200
- ? 0
201
- : spansCovered.length / q.answerSpans.length;
202
- const hitAnyAt = (k) => hitRanks.some((r) => r <= k) ? 1 : 0;
203
- const reciprocalRank = firstHitRank ? 1 / firstHitRank : 0;
204
- const contextEfficiency = firstHitRank !== null && topKChars > 0
205
- ? (1000 * spansCovered.length) / topKChars
206
- : 0;
207
- const fileMatched = (k) => {
208
- const top = retrievedSources.slice(0, k);
209
- return top.some((rs) => q.expectedSources.some((es) => endsWithExpected(rs, es)))
210
- ? 1
211
- : 0;
212
- };
213
- perQuery.push({
214
- id: q.id,
215
- query: q.query,
216
- difficulty: q.difficulty,
217
- category: q.category,
218
- expectedSources: q.expectedSources,
219
- answerSpans: q.answerSpans,
220
- retrievedSources,
221
- topKChunks: chunks.length,
222
- topKChars,
223
- uniqueFiles,
224
- hitRanks,
225
- firstHitRank,
226
- spansCovered,
227
- spansMissing,
228
- answerSpanRecall,
229
- hitAnyAt1: hitAnyAt(1),
230
- hitAnyAt3: hitAnyAt(3),
231
- hitAnyAt5: hitAnyAt(5),
232
- hitAnyAt10: hitAnyAt(10),
233
- reciprocalRank,
234
- contextEfficiency,
235
- fileRecallAt5: fileMatched(5),
236
- fileRecallAt10: fileMatched(10),
237
- });
238
- if (!QUIET) {
239
- const status = hitAnyAt(5) ? 'OK' : 'MISS';
240
- console.log(`${status.padEnd(4)} ${q.id} spans=${spansCovered.length}/${q.answerSpans.length} fhr=${firstHitRank ?? '-'}`);
241
- }
242
- }
243
- if (!QUIET) {
244
- printPerQueryTable(perQuery);
245
- }
246
- const overall = aggregate(perQuery);
247
- const byDifficulty = {};
248
- for (const d of ['easy', 'medium', 'vague']) {
249
- byDifficulty[d] = aggregate(perQuery.filter((r) => r.difficulty === d));
250
- }
251
- console.log('');
252
- printAggregate('overall', overall);
253
- for (const d of ['easy', 'medium', 'vague']) {
254
- printAggregate(d, byDifficulty[d]);
255
- }
256
- console.log('');
257
- if (!NO_SAVE) {
258
- const run = {
259
- timestamp: new Date().toISOString(),
260
- label: LABEL,
261
- datasetVersion: dataset.version,
262
- topK: TOP_K,
263
- overall,
264
- byDifficulty,
265
- perQuery,
266
- };
267
- const dir = resolveResultsDir();
268
- const stamp = run.timestamp.replace(/[:.]/g, '-');
269
- const outPath = path.join(dir, `${LABEL}-${stamp}.json`);
270
- const labelLatestPath = path.join(dir, `${LABEL}-latest.json`);
271
- const latestPath = path.join(dir, 'latest.json');
272
- fs.writeFileSync(outPath, JSON.stringify(run, null, 2));
273
- fs.writeFileSync(labelLatestPath, JSON.stringify(run, null, 2));
274
- fs.writeFileSync(latestPath, JSON.stringify(run, null, 2));
275
- console.log(`Saved: ${path.relative(process.cwd(), outPath)}`);
276
- console.log(` ${path.relative(process.cwd(), labelLatestPath)}`);
277
- console.log(` ${path.relative(process.cwd(), latestPath)}\n`);
278
- }
279
- }
280
- try {
281
- await runEval();
282
- }
283
- catch (err) {
284
- console.error('Eval failed:', err);
285
- process.exit(1);
286
- }
287
- //# sourceMappingURL=eval-documentation-rag.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eval-documentation-rag.js","sourceRoot":"","sources":["../../src/scripts/eval-documentation-rag.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Generate the embeddings cache for the currently configured model.
3
- *
4
- * Idempotent: if a valid cache already exists for the current model and the
5
- * fingerprint matches documents.json, this exits quickly. Otherwise it
6
- * embeds all chunks and writes the cache.
7
- *
8
- * Intended for the maintainer release flow:
9
- * npm run build && npm run generate-cache
10
- * to ensure the published tarball ships a warm cache for the default model.
11
- */
12
- export {};
13
- //# sourceMappingURL=generate-embeddings-cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-embeddings-cache.d.ts","sourceRoot":"","sources":["../../src/scripts/generate-embeddings-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Generate the embeddings cache for the currently configured model.
3
- *
4
- * Idempotent: if a valid cache already exists for the current model and the
5
- * fingerprint matches documents.json, this exits quickly. Otherwise it
6
- * embeds all chunks and writes the cache.
7
- *
8
- * Intended for the maintainer release flow:
9
- * npm run build && npm run generate-cache
10
- * to ensure the published tarball ships a warm cache for the default model.
11
- */
12
- import { queryVectorStore } from '../tools/documentation/simple-pdf-indexer.js';
13
- const start = Date.now();
14
- try {
15
- // A single query forces the cold-start path inside queryVectorStore, which
16
- // checks the cache and embeds+saves on miss. We don't care about results.
17
- await queryVectorStore('warmup', 1);
18
- console.log(`Embeddings cache ready (${Date.now() - start}ms)`);
19
- }
20
- catch (err) {
21
- console.error('Failed to generate embeddings cache:', err);
22
- process.exit(1);
23
- }
24
- //# sourceMappingURL=generate-embeddings-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-embeddings-cache.js","sourceRoot":"","sources":["../../src/scripts/generate-embeddings-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAEhF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACzB,IAAI,CAAC;IACH,2EAA2E;IAC3E,0EAA0E;IAC1E,MAAM,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAClE,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}