appium-mcp 1.8.15 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/tools/documentation/reasoning-rag.d.ts +1 -1
  3. package/dist/tools/documentation/reasoning-rag.d.ts.map +1 -1
  4. package/dist/tools/documentation/simple-pdf-indexer.d.ts +2 -2
  5. package/dist/tools/documentation/simple-pdf-indexer.d.ts.map +1 -1
  6. package/dist/tools/documentation/simple-pdf-indexer.js +3 -3
  7. package/dist/tools/documentation/simple-pdf-indexer.js.map +1 -1
  8. package/package.json +6 -3
  9. package/server.json +2 -2
  10. package/src/command.ts +249 -0
  11. package/src/devicemanager/adb-manager.ts +164 -0
  12. package/src/devicemanager/ios-manager.ts +145 -0
  13. package/src/index.ts +45 -0
  14. package/src/locators/element-filter.ts +136 -0
  15. package/src/locators/generate-all-locators.ts +150 -0
  16. package/src/locators/locator-generation.ts +657 -0
  17. package/src/locators/source-parsing.ts +149 -0
  18. package/src/logger.ts +11 -0
  19. package/src/resources/caps.json +697 -0
  20. package/src/resources/index.ts +8 -0
  21. package/src/resources/java/template.ts +83 -0
  22. package/src/resources/submodules/appium/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  23. package/src/resources/submodules/appium/CHANGELOG.md +45 -0
  24. package/src/resources/submodules/appium/CONDUCT.md +48 -0
  25. package/src/resources/submodules/appium/GOVERNANCE.md +185 -0
  26. package/src/resources/submodules/appium/IDEAS.md +16 -0
  27. package/src/resources/submodules/appium/README.md +221 -0
  28. package/src/resources/submodules/appium/ROADMAP.md +30 -0
  29. package/src/resources/submodules/appium/SPONSORS.md +3 -0
  30. package/src/resources/submodules/appium/docs/README.md +6 -0
  31. package/src/resources/submodules/appium/docs/payout.md +35 -0
  32. package/src/resources/submodules/appium/packages/appium/CHANGELOG.md +1437 -0
  33. package/src/resources/submodules/appium/packages/appium/README.md +221 -0
  34. package/src/resources/submodules/appium/packages/appium/docs/en/blog/index.md +2 -0
  35. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-appiumconf2024.md +45 -0
  36. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  37. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  38. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-strategic-partner.md +42 -0
  39. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  40. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sponsorship-program.md +48 -0
  41. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/appium3.md +40 -0
  42. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/hello-world.md +15 -0
  43. package/src/resources/submodules/appium/packages/appium/docs/en/contributing/index.md +150 -0
  44. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-docs.md +86 -0
  45. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-doctor-checks.md +141 -0
  46. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-drivers.md +860 -0
  47. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-plugins.md +514 -0
  48. package/src/resources/submodules/appium/packages/appium/docs/en/developing/config-system.md +451 -0
  49. package/src/resources/submodules/appium/packages/appium/docs/en/developing/index.md +18 -0
  50. package/src/resources/submodules/appium/packages/appium/docs/en/developing/sensitive.md +49 -0
  51. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/clients.md +132 -0
  52. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/drivers.md +207 -0
  53. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/index.md +45 -0
  54. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/plugins.md +138 -0
  55. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/tools.md +83 -0
  56. package/src/resources/submodules/appium/packages/appium/docs/en/guides/branch-testing.md +57 -0
  57. package/src/resources/submodules/appium/packages/appium/docs/en/guides/caching.md +76 -0
  58. package/src/resources/submodules/appium/packages/appium/docs/en/guides/caps.md +275 -0
  59. package/src/resources/submodules/appium/packages/appium/docs/en/guides/config.md +98 -0
  60. package/src/resources/submodules/appium/packages/appium/docs/en/guides/context.md +44 -0
  61. package/src/resources/submodules/appium/packages/appium/docs/en/guides/event-timing.md +73 -0
  62. package/src/resources/submodules/appium/packages/appium/docs/en/guides/execute-methods.md +122 -0
  63. package/src/resources/submodules/appium/packages/appium/docs/en/guides/grid.md +166 -0
  64. package/src/resources/submodules/appium/packages/appium/docs/en/guides/headers.md +17 -0
  65. package/src/resources/submodules/appium/packages/appium/docs/en/guides/log-filters.md +86 -0
  66. package/src/resources/submodules/appium/packages/appium/docs/en/guides/managing-exts.md +87 -0
  67. package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-1-to-2.md +368 -0
  68. package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-2-to-3.md +464 -0
  69. package/src/resources/submodules/appium/packages/appium/docs/en/guides/security.md +89 -0
  70. package/src/resources/submodules/appium/packages/appium/docs/en/guides/settings.md +68 -0
  71. package/src/resources/submodules/appium/packages/appium/docs/en/guides/tls.md +42 -0
  72. package/src/resources/submodules/appium/packages/appium/docs/en/index.md +59 -0
  73. package/src/resources/submodules/appium/packages/appium/docs/en/intro/appium.md +202 -0
  74. package/src/resources/submodules/appium/packages/appium/docs/en/intro/clients.md +127 -0
  75. package/src/resources/submodules/appium/packages/appium/docs/en/intro/drivers.md +188 -0
  76. package/src/resources/submodules/appium/packages/appium/docs/en/intro/history.md +196 -0
  77. package/src/resources/submodules/appium/packages/appium/docs/en/intro/index.md +39 -0
  78. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/index.md +29 -0
  79. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/install.md +50 -0
  80. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/next-steps.md +23 -0
  81. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/requirements.md +29 -0
  82. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-dotnet.md +105 -0
  83. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-java.md +23 -0
  84. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-js.md +75 -0
  85. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-py.md +60 -0
  86. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-rb.md +83 -0
  87. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/uiauto2-driver.md +144 -0
  88. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/appium.md +394 -0
  89. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/bidi.md +70 -0
  90. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/index.md +30 -0
  91. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/jsonwp.md +214 -0
  92. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/mjsonwp.md +151 -0
  93. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/others.md +671 -0
  94. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/plugins.md +289 -0
  95. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/webdriver.md +1114 -0
  96. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/env-vars.md +31 -0
  97. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/extensions.md +239 -0
  98. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/index.md +35 -0
  99. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/server.md +76 -0
  100. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/setup.md +76 -0
  101. package/src/resources/submodules/appium/packages/appium/docs/en/reference/index.md +25 -0
  102. package/src/resources/submodules/appium/packages/appium/docs/en/resources/index.md +28 -0
  103. package/src/resources/submodules/appium/packages/appium/docs/en/sponsors/index.md +64 -0
  104. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/index.md +2 -0
  105. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-appiumconf2024.md +45 -0
  106. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  107. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  108. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
  109. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  110. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sponsorship-program.md +48 -0
  111. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/appium3.md +40 -0
  112. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/hello-world.md +15 -0
  113. package/src/resources/submodules/appium/packages/appium/docs/ja/contributing/index.md +158 -0
  114. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-docs.md +86 -0
  115. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-doctor-checks.md +141 -0
  116. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-drivers.md +866 -0
  117. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-plugins.md +520 -0
  118. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/config-system.md +468 -0
  119. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/index.md +18 -0
  120. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/sensitive.md +49 -0
  121. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/clients.md +143 -0
  122. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/drivers.md +219 -0
  123. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/index.md +45 -0
  124. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/plugins.md +140 -0
  125. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/tools.md +87 -0
  126. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/branch-testing.md +57 -0
  127. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caching.md +78 -0
  128. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caps.md +259 -0
  129. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/config.md +102 -0
  130. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/context.md +44 -0
  131. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/event-timing.md +75 -0
  132. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/execute-methods.md +142 -0
  133. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/grid.md +166 -0
  134. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/headers.md +17 -0
  135. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/log-filters.md +86 -0
  136. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/managing-exts.md +89 -0
  137. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-1-to-2.md +402 -0
  138. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-2-to-3.md +458 -0
  139. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/security.md +89 -0
  140. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/settings.md +70 -0
  141. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/tls.md +43 -0
  142. package/src/resources/submodules/appium/packages/appium/docs/ja/index.md +55 -0
  143. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/appium.md +191 -0
  144. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/clients.md +139 -0
  145. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/drivers.md +188 -0
  146. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/history.md +196 -0
  147. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/index.md +39 -0
  148. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/index.md +23 -0
  149. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/install.md +47 -0
  150. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/next-steps.md +19 -0
  151. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/requirements.md +29 -0
  152. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-dotnet.md +107 -0
  153. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-java.md +23 -0
  154. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-js.md +77 -0
  155. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-py.md +63 -0
  156. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-rb.md +85 -0
  157. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/uiauto2-driver.md +148 -0
  158. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/appium.md +395 -0
  159. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/bidi.md +71 -0
  160. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/index.md +30 -0
  161. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/jsonwp.md +215 -0
  162. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/mjsonwp.md +152 -0
  163. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/others.md +672 -0
  164. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/plugins.md +291 -0
  165. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/webdriver.md +1114 -0
  166. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/env-vars.md +31 -0
  167. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/extensions.md +240 -0
  168. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/index.md +35 -0
  169. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/server.md +76 -0
  170. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/setup.md +78 -0
  171. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/index.md +25 -0
  172. package/src/resources/submodules/appium/packages/appium/docs/ja/resources/index.md +28 -0
  173. package/src/resources/submodules/appium/packages/appium/docs/ja/sponsors/index.md +61 -0
  174. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz-white.png +0 -0
  175. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png +0 -0
  176. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-white.png +0 -0
  177. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo.png +0 -0
  178. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png +0 -0
  179. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-light.png +0 -0
  180. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png +0 -0
  181. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png +0 -0
  182. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-sauce.png +0 -0
  183. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/index.md +2 -0
  184. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-appiumconf2024.md +45 -0
  185. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  186. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  187. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
  188. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  189. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sponsorship-program.md +48 -0
  190. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/appium3.md +40 -0
  191. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/hello-world.md +15 -0
  192. package/src/resources/submodules/appium/packages/appium/docs/zh/contributing/index.md +132 -0
  193. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-docs.md +86 -0
  194. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-doctor-checks.md +141 -0
  195. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-drivers.md +866 -0
  196. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-plugins.md +520 -0
  197. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/config-system.md +468 -0
  198. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/index.md +18 -0
  199. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/sensitive.md +49 -0
  200. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/clients.md +143 -0
  201. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/drivers.md +219 -0
  202. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/index.md +45 -0
  203. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/plugins.md +140 -0
  204. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/tools.md +87 -0
  205. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/branch-testing.md +57 -0
  206. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caching.md +78 -0
  207. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caps.md +284 -0
  208. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/config.md +102 -0
  209. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/context.md +44 -0
  210. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/event-timing.md +75 -0
  211. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/execute-methods.md +142 -0
  212. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/grid.md +166 -0
  213. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/headers.md +17 -0
  214. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/log-filters.md +86 -0
  215. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/managing-exts.md +89 -0
  216. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-1-to-2.md +410 -0
  217. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-2-to-3.md +459 -0
  218. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/security.md +89 -0
  219. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/settings.md +70 -0
  220. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/tls.md +43 -0
  221. package/src/resources/submodules/appium/packages/appium/docs/zh/index.md +54 -0
  222. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/appium.md +200 -0
  223. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/clients.md +139 -0
  224. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/drivers.md +188 -0
  225. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/history.md +196 -0
  226. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/index.md +39 -0
  227. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/index.md +23 -0
  228. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/install.md +47 -0
  229. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/next-steps.md +19 -0
  230. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/requirements.md +21 -0
  231. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-dotnet.md +99 -0
  232. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-java.md +20 -0
  233. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-js.md +62 -0
  234. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-py.md +57 -0
  235. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-rb.md +80 -0
  236. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/uiauto2-driver.md +148 -0
  237. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/appium.md +395 -0
  238. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/bidi.md +71 -0
  239. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/index.md +30 -0
  240. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/jsonwp.md +215 -0
  241. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/mjsonwp.md +152 -0
  242. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/others.md +672 -0
  243. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/plugins.md +291 -0
  244. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/webdriver.md +1114 -0
  245. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/env-vars.md +31 -0
  246. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/extensions.md +240 -0
  247. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/index.md +35 -0
  248. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/server.md +76 -0
  249. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/setup.md +78 -0
  250. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/index.md +25 -0
  251. package/src/resources/submodules/appium/packages/appium/docs/zh/resources/index.md +28 -0
  252. package/src/resources/submodules/appium/packages/appium/docs/zh/sponsors/index.md +61 -0
  253. package/src/resources/submodules/appium/packages/appium/types/manifest/README.md +30 -0
  254. package/src/resources/submodules/appium/packages/base-driver/CHANGELOG.md +1131 -0
  255. package/src/resources/submodules/appium/packages/base-driver/README.md +15 -0
  256. package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/errors.md +82 -0
  257. package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/protocol-methods.md +182 -0
  258. package/src/resources/submodules/appium/packages/base-driver/static/appium.png +0 -0
  259. package/src/resources/submodules/appium/packages/base-plugin/CHANGELOG.md +672 -0
  260. package/src/resources/submodules/appium/packages/base-plugin/README.md +15 -0
  261. package/src/resources/submodules/appium/packages/docutils/CHANGELOG.md +948 -0
  262. package/src/resources/submodules/appium/packages/docutils/README.md +27 -0
  263. package/src/resources/submodules/appium/packages/driver-test-support/CHANGELOG.md +717 -0
  264. package/src/resources/submodules/appium/packages/driver-test-support/README.md +112 -0
  265. package/src/resources/submodules/appium/packages/eslint-config-appium-ts/CHANGELOG.md +168 -0
  266. package/src/resources/submodules/appium/packages/eslint-config-appium-ts/README.md +33 -0
  267. package/src/resources/submodules/appium/packages/execute-driver-plugin/CHANGELOG.md +603 -0
  268. package/src/resources/submodules/appium/packages/execute-driver-plugin/README.md +42 -0
  269. package/src/resources/submodules/appium/packages/fake-driver/CHANGELOG.md +545 -0
  270. package/src/resources/submodules/appium/packages/fake-driver/README.md +7 -0
  271. package/src/resources/submodules/appium/packages/fake-driver/lib/screen.png +0 -0
  272. package/src/resources/submodules/appium/packages/fake-plugin/CHANGELOG.md +683 -0
  273. package/src/resources/submodules/appium/packages/fake-plugin/README.md +7 -0
  274. package/src/resources/submodules/appium/packages/images-plugin/CHANGELOG.md +602 -0
  275. package/src/resources/submodules/appium/packages/images-plugin/README.md +27 -0
  276. package/src/resources/submodules/appium/packages/images-plugin/docs/find-by-image.md +65 -0
  277. package/src/resources/submodules/appium/packages/images-plugin/docs/image-comparison.md +203 -0
  278. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/appstore.png +0 -0
  279. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img1.png +0 -0
  280. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2.png +0 -0
  281. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2_part.png +0 -0
  282. package/src/resources/submodules/appium/packages/logger/CHANGELOG.md +162 -0
  283. package/src/resources/submodules/appium/packages/logger/README.md +31 -0
  284. package/src/resources/submodules/appium/packages/opencv/CHANGELOG.md +384 -0
  285. package/src/resources/submodules/appium/packages/opencv/README.md +68 -0
  286. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/appium-diagram.jpg +0 -0
  287. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc1.png +0 -0
  288. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc2.png +0 -0
  289. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc_rotated.png +0 -0
  290. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/findwaldo.jpg +0 -0
  291. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/number5.png +0 -0
  292. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/waldo.jpg +0 -0
  293. package/src/resources/submodules/appium/packages/plugin-test-support/CHANGELOG.md +539 -0
  294. package/src/resources/submodules/appium/packages/plugin-test-support/README.md +49 -0
  295. package/src/resources/submodules/appium/packages/relaxed-caps-plugin/CHANGELOG.md +154 -0
  296. package/src/resources/submodules/appium/packages/relaxed-caps-plugin/README.md +35 -0
  297. package/src/resources/submodules/appium/packages/schema/CHANGELOG.md +271 -0
  298. package/src/resources/submodules/appium/packages/schema/README.md +50 -0
  299. package/src/resources/submodules/appium/packages/storage-plugin/CHANGELOG.md +73 -0
  300. package/src/resources/submodules/appium/packages/storage-plugin/README.md +83 -0
  301. package/src/resources/submodules/appium/packages/strongbox/CHANGELOG.md +94 -0
  302. package/src/resources/submodules/appium/packages/strongbox/README.md +96 -0
  303. package/src/resources/submodules/appium/packages/support/CHANGELOG.md +1054 -0
  304. package/src/resources/submodules/appium/packages/support/README.md +161 -0
  305. package/src/resources/submodules/appium/packages/test-support/CHANGELOG.md +712 -0
  306. package/src/resources/submodules/appium/packages/test-support/README.md +61 -0
  307. package/src/resources/submodules/appium/packages/tsconfig/CHANGELOG.md +131 -0
  308. package/src/resources/submodules/appium/packages/tsconfig/README.md +19 -0
  309. package/src/resources/submodules/appium/packages/types/CHANGELOG.md +793 -0
  310. package/src/resources/submodules/appium/packages/types/README.md +21 -0
  311. package/src/resources/submodules/appium/packages/universal-xml-plugin/CHANGELOG.md +435 -0
  312. package/src/resources/submodules/appium/packages/universal-xml-plugin/README.md +53 -0
  313. package/src/resources/submodules/appium/renovate/README.md +63 -0
  314. package/src/resources/submodules/appium-uiautomator2-driver/CHANGELOG.md +1204 -0
  315. package/src/resources/submodules/appium-uiautomator2-driver/README.md +2077 -0
  316. package/src/resources/submodules/appium-uiautomator2-driver/docs/actions.md +72 -0
  317. package/src/resources/submodules/appium-uiautomator2-driver/docs/activity-startup.md +47 -0
  318. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-appbundle.md +69 -0
  319. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-mobile-gestures.md +352 -0
  320. package/src/resources/submodules/appium-uiautomator2-driver/docs/bidi.md +50 -0
  321. package/src/resources/submodules/appium-uiautomator2-driver/docs/capability-sets.md +136 -0
  322. package/src/resources/submodules/appium-uiautomator2-driver/docs/scheduled-actions.md +155 -0
  323. package/src/resources/submodules/appium-uiautomator2-driver/docs/uiautomator-uiselector.md +51 -0
  324. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/main.md +95 -0
  325. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen1.png +0 -0
  326. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen2.png +0 -0
  327. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/checkered-squares.png +0 -0
  328. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/start-button.png +0 -0
  329. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/stop-button.png +0 -0
  330. package/src/resources/submodules/appium-xcuitest-driver/.github/ISSUE_TEMPLATE.md +4 -0
  331. package/src/resources/submodules/appium-xcuitest-driver/CHANGELOG.md +2594 -0
  332. package/src/resources/submodules/appium-xcuitest-driver/README.md +55 -0
  333. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo-white.png +0 -0
  334. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo.png +0 -0
  335. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-plus-xctest.png +0 -0
  336. package/src/resources/submodules/appium-xcuitest-driver/docs/contributing.md +45 -0
  337. package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints-wda.md +61 -0
  338. package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints.md +98 -0
  339. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/keynote.png +0 -0
  340. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/on_my_iphone.png +0 -0
  341. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/top_files.png +0 -0
  342. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/attach-to-running-wda.md +43 -0
  343. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/audio-capture.md +78 -0
  344. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/capability-sets.md +169 -0
  345. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/ci-setup.md +47 -0
  346. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/clipboard.md +47 -0
  347. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/elements-lookup-troubleshooting.md +158 -0
  348. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/file-transfer.md +147 -0
  349. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/gestures.md +52 -0
  350. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/hybrid.md +137 -0
  351. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/input-events.md +67 -0
  352. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/install-certificate.md +19 -0
  353. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/multiple-xcode-versions.md +37 -0
  354. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/parallel-tests.md +39 -0
  355. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-prebuilt-wda.md +135 -0
  356. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-preinstalled-wda.md +178 -0
  357. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/touch-id.md +33 -0
  358. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/troubleshooting.md +191 -0
  359. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/tvos.md +114 -0
  360. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-custom-server.md +283 -0
  361. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-slowness.md +231 -0
  362. package/src/resources/submodules/appium-xcuitest-driver/docs/index.md +36 -0
  363. package/src/resources/submodules/appium-xcuitest-driver/docs/installation/index.md +137 -0
  364. package/src/resources/submodules/appium-xcuitest-driver/docs/overview.md +19 -0
  365. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/check-prov-prof.png +0 -0
  366. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-new-project.png +0 -0
  367. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-single-page.png +0 -0
  368. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/no-prov-prof.png +0 -0
  369. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/project-prov-prof.png +0 -0
  370. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/set-up-bundle.png +0 -0
  371. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/untrusted-dev.png +0 -0
  372. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-bundle-id.png +0 -0
  373. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-config.png +0 -0
  374. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-fail.png +0 -0
  375. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-succeed.png +0 -0
  376. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/index.md +51 -0
  377. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-auto.md +49 -0
  378. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-manual.md +40 -0
  379. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-full-manual.md +50 -0
  380. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-generic-manual.md +49 -0
  381. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/real-device-config.md +100 -0
  382. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/assets/images/useXctestrunFile.png +0 -0
  383. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/bidi.md +75 -0
  384. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/capabilities.md +165 -0
  385. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/commands.md +490 -0
  386. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/element-attributes.md +27 -0
  387. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/execute-methods.md +2206 -0
  388. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/ios-predicate.md +196 -0
  389. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/locator-strategies.md +19 -0
  390. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/scripts.md +29 -0
  391. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/security-flags.md +22 -0
  392. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/server-args.md +16 -0
  393. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/settings.md +49 -0
  394. package/src/resources/submodules/appium-xcuitest-driver/test/assets/TestApp-iphonesimulator.app/Default-568h@2x.png +0 -0
  395. package/src/resources/submodules/appium-xcuitest-driver/test/assets/test.png +0 -0
  396. package/src/schema.ts +5 -0
  397. package/src/scripts/simple-index-documentation.ts +93 -0
  398. package/src/scripts/simple-query-documentation.ts +61 -0
  399. package/src/server.ts +40 -0
  400. package/src/session-store.ts +151 -0
  401. package/src/tests/README.md +83 -0
  402. package/src/tests/__mocks__/@appium/support.ts +30 -0
  403. package/src/tests/generate-all-locators.test.ts +178 -0
  404. package/src/tests/screenshot.test.ts +279 -0
  405. package/src/tests/test-setup-wda.ts +255 -0
  406. package/src/tools/README.md +179 -0
  407. package/src/tools/app-management/activate-app.ts +47 -0
  408. package/src/tools/app-management/install-app.ts +46 -0
  409. package/src/tools/app-management/list-apps.ts +87 -0
  410. package/src/tools/app-management/terminate-app.ts +48 -0
  411. package/src/tools/app-management/uninstall-app.ts +48 -0
  412. package/src/tools/context/get-contexts.ts +87 -0
  413. package/src/tools/context/switch-context.ts +101 -0
  414. package/src/tools/documentation/answer-appium.ts +73 -0
  415. package/src/tools/documentation/index.ts +98 -0
  416. package/src/tools/documentation/reasoning-rag.ts +435 -0
  417. package/src/tools/documentation/sentence-transformers-embeddings.ts +144 -0
  418. package/src/tools/documentation/simple-pdf-indexer.ts +508 -0
  419. package/src/tools/documentation/uploads/documents.json +1 -0
  420. package/src/tools/index.ts +159 -0
  421. package/src/tools/interactions/click.ts +48 -0
  422. package/src/tools/interactions/double-tap.ts +96 -0
  423. package/src/tools/interactions/drag-and-drop.ts +236 -0
  424. package/src/tools/interactions/find.ts +58 -0
  425. package/src/tools/interactions/get-page-source.ts +65 -0
  426. package/src/tools/interactions/get-text.ts +48 -0
  427. package/src/tools/interactions/long-press.ts +111 -0
  428. package/src/tools/interactions/screenshot.ts +116 -0
  429. package/src/tools/interactions/set-value.ts +49 -0
  430. package/src/tools/ios/boot-simulator.ts +88 -0
  431. package/src/tools/ios/install-wda.ts +277 -0
  432. package/src/tools/ios/setup-wda.ts +217 -0
  433. package/src/tools/navigations/scroll-to-element.ts +198 -0
  434. package/src/tools/navigations/scroll.ts +101 -0
  435. package/src/tools/navigations/swipe.ts +364 -0
  436. package/src/tools/session/create-session.ts +379 -0
  437. package/src/tools/session/delete-session.ts +56 -0
  438. package/src/tools/session/select-device.ts +326 -0
  439. package/src/tools/session/select-platform.ts +250 -0
  440. package/src/tools/test-generation/generate-tests.ts +48 -0
  441. package/src/tools/test-generation/locators.ts +103 -0
  442. package/src/ui/mcp-ui-utils.ts +1630 -0
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Tools Registration Module
3
+ *
4
+ * This file registers all available MCP tools with the server.
5
+ *
6
+ * ADDING A NEW TOOL:
7
+ * 1. Create your tool file in src/tools/
8
+ * 2. Import it at the top of this file
9
+ * 3. Call it in the registerTools function below
10
+ *
11
+ * See docs/CONTRIBUTING.md for detailed instructions.
12
+ * See src/tools/README.md for tool organization.
13
+ * See src/tools/metadata/README.md for YAML metadata approach.
14
+ */
15
+ import { FastMCP } from 'fastmcp';
16
+ import log from '../logger.js';
17
+ import answerAppium from './documentation/answer-appium.js';
18
+ import createSession from './session/create-session.js';
19
+ import deleteSession from './session/delete-session.js';
20
+ import generateLocators from './test-generation/locators.js';
21
+ import selectPlatform from './session/select-platform.js';
22
+ import selectDevice from './session/select-device.js';
23
+ import bootSimulator from './ios/boot-simulator.js';
24
+ import setupWDA from './ios/setup-wda.js';
25
+ import installWDA from './ios/install-wda.js';
26
+ import generateTest from './test-generation/generate-tests.js';
27
+ import scroll from './navigations/scroll.js';
28
+ import scrollToElement from './navigations/scroll-to-element.js';
29
+ import swipe from './navigations/swipe.js';
30
+ import findElement from './interactions/find.js';
31
+ import clickElement from './interactions/click.js';
32
+ import doubleTap from './interactions/double-tap.js';
33
+ import longPress from './interactions/long-press.js';
34
+ import dragAndDrop from './interactions/drag-and-drop.js';
35
+ import setValue from './interactions/set-value.js';
36
+ import getText from './interactions/get-text.js';
37
+ import getPageSource from './interactions/get-page-source.js';
38
+ import screenshot from './interactions/screenshot.js';
39
+ import activateApp from './app-management/activate-app.js';
40
+ import installApp from './app-management/install-app.js';
41
+ import uninstallApp from './app-management/uninstall-app.js';
42
+ import terminateApp from './app-management/terminate-app.js';
43
+ import listApps from './app-management/list-apps.js';
44
+ import getContexts from './context/get-contexts.js';
45
+ import switchContext from './context/switch-context.js';
46
+
47
+ export default function registerTools(server: FastMCP): void {
48
+ // Wrap addTool to inject logging around tool execution
49
+ const originalAddTool = (server as any).addTool.bind(server);
50
+ (server as any).addTool = (toolDef: any) => {
51
+ const toolName = toolDef?.name ?? 'unknown_tool';
52
+ const originalExecute = toolDef?.execute;
53
+ if (typeof originalExecute !== 'function') {
54
+ return originalAddTool(toolDef);
55
+ }
56
+ const SENSITIVE_KEYS = [
57
+ 'password',
58
+ 'token',
59
+ 'accessToken',
60
+ 'authorization',
61
+ 'apiKey',
62
+ 'apikey',
63
+ 'secret',
64
+ 'clientSecret',
65
+ ];
66
+ const redactArgs = (obj: any) => {
67
+ try {
68
+ return JSON.parse(
69
+ JSON.stringify(obj, (key, value) => {
70
+ if (
71
+ key &&
72
+ SENSITIVE_KEYS.some((k) => key.toLowerCase().includes(k))
73
+ ) {
74
+ return '[REDACTED]';
75
+ }
76
+ // Avoid logging extremely large buffers/strings
77
+ if (value && typeof value === 'string' && value.length > 2000) {
78
+ return `[string:${value.length}]`;
79
+ }
80
+ if (
81
+ value &&
82
+ typeof Buffer !== 'undefined' &&
83
+ Buffer.isBuffer(value)
84
+ ) {
85
+ return `[buffer:${(value as Buffer).length}]`;
86
+ }
87
+ return value;
88
+ })
89
+ );
90
+ } catch {
91
+ return '[Unserializable args]';
92
+ }
93
+ };
94
+ return originalAddTool({
95
+ ...toolDef,
96
+ execute: async (args: any, context: any) => {
97
+ const start = Date.now();
98
+ log.info(`[TOOL START] ${toolName}`, redactArgs(args));
99
+ try {
100
+ const result = await originalExecute(args, context);
101
+ const duration = Date.now() - start;
102
+ log.info(`[TOOL END] ${toolName} (${duration}ms)`);
103
+ return result;
104
+ } catch (err: any) {
105
+ const duration = Date.now() - start;
106
+ const msg = err?.stack || err?.message || String(err);
107
+ log.error(`[TOOL ERROR] ${toolName} (${duration}ms): ${msg}`);
108
+ throw err;
109
+ }
110
+ },
111
+ });
112
+ };
113
+
114
+ // Session Management
115
+ selectPlatform(server);
116
+ selectDevice(server);
117
+ createSession(server);
118
+ deleteSession(server);
119
+
120
+ // iOS Setup
121
+ bootSimulator(server);
122
+ setupWDA(server);
123
+ installWDA(server);
124
+
125
+ // Navigation
126
+ scroll(server);
127
+ scrollToElement(server);
128
+ swipe(server);
129
+
130
+ // Element Interactions
131
+ findElement(server);
132
+ clickElement(server);
133
+ doubleTap(server);
134
+ longPress(server);
135
+ dragAndDrop(server);
136
+ setValue(server);
137
+ getText(server);
138
+ getPageSource(server);
139
+ screenshot(server);
140
+
141
+ // App Management
142
+ activateApp(server);
143
+ installApp(server);
144
+ uninstallApp(server);
145
+ terminateApp(server);
146
+ listApps(server);
147
+
148
+ // Context Management
149
+ getContexts(server);
150
+ switchContext(server);
151
+
152
+ // Test Generation
153
+ generateLocators(server);
154
+ generateTest(server);
155
+
156
+ // Documentation
157
+ answerAppium(server);
158
+ log.info('All tools registered');
159
+ }
@@ -0,0 +1,48 @@
1
+ import { FastMCP } from 'fastmcp';
2
+ import { z } from 'zod';
3
+ import { getDriver } from '../../session-store.js';
4
+ import { elementUUIDScheme } from '../../schema.js';
5
+ import { elementClick as _elementClick } from '../../command.js';
6
+
7
+ export default function generateTest(server: FastMCP): void {
8
+ const clickActionSchema = z.object({
9
+ elementUUID: elementUUIDScheme,
10
+ });
11
+
12
+ server.addTool({
13
+ name: 'appium_click',
14
+ description: 'Click on an element',
15
+ parameters: clickActionSchema,
16
+ annotations: {
17
+ readOnlyHint: false,
18
+ openWorldHint: false,
19
+ },
20
+ execute: async (args: any, context: any): Promise<any> => {
21
+ const driver = getDriver();
22
+ if (!driver) {
23
+ throw new Error('No driver found');
24
+ }
25
+
26
+ try {
27
+ await _elementClick(driver, args.elementUUID);
28
+ return {
29
+ content: [
30
+ {
31
+ type: 'text',
32
+ text: `Successfully clicked on element ${args.elementUUID}`,
33
+ },
34
+ ],
35
+ };
36
+ } catch (err: any) {
37
+ return {
38
+ content: [
39
+ {
40
+ type: 'text',
41
+ text: `Failed to click on element ${args.elementUUID}. err: ${err.toString()}`,
42
+ },
43
+ ],
44
+ };
45
+ }
46
+ },
47
+ });
48
+ }
@@ -0,0 +1,96 @@
1
+ import { FastMCP } from 'fastmcp';
2
+ import { z } from 'zod';
3
+ import {
4
+ getDriver,
5
+ getPlatformName,
6
+ isAndroidUiautomator2DriverSession,
7
+ PLATFORM,
8
+ } from '../../session-store.js';
9
+ import { elementUUIDScheme } from '../../schema.js';
10
+ import type { Client } from 'webdriver';
11
+ import { execute, getElementRect, performActions } from '../../command.js';
12
+
13
+ export default function doubleTap(server: FastMCP): void {
14
+ const doubleTapActionSchema = z.object({
15
+ elementUUID: elementUUIDScheme,
16
+ });
17
+
18
+ server.addTool({
19
+ name: 'appium_double_tap',
20
+ description: 'Perform double tap on an element',
21
+ parameters: doubleTapActionSchema,
22
+ annotations: {
23
+ readOnlyHint: false,
24
+ openWorldHint: false,
25
+ },
26
+ execute: async (args: any, context: any): Promise<any> => {
27
+ const driver = getDriver();
28
+ if (!driver) {
29
+ throw new Error('No driver found');
30
+ }
31
+
32
+ try {
33
+ const platform = getPlatformName(driver);
34
+ if (platform === PLATFORM.android) {
35
+ // Get element location for Android double tap
36
+ const element = await driver.findElement('id', args.elementUUID);
37
+ const elementRect = await getElementRect(
38
+ driver,
39
+ element['element-6066-11e4-a52e-4f735466cecf']
40
+ );
41
+
42
+ // Calculate center coordinates
43
+ const x = elementRect.x + elementRect.width / 2;
44
+ const y = elementRect.y + elementRect.height / 2;
45
+
46
+ // Perform double tap using performActions
47
+ const operation = [
48
+ {
49
+ type: 'pointer',
50
+ id: 'finger1',
51
+ parameters: { pointerType: 'touch' },
52
+ actions: [
53
+ { type: 'pointerMove', duration: 0, x, y },
54
+ { type: 'pointerDown', button: 0 },
55
+ { type: 'pause', duration: 50 },
56
+ { type: 'pointerUp', button: 0 },
57
+ { type: 'pause', duration: 100 },
58
+ { type: 'pointerDown', button: 0 },
59
+ { type: 'pause', duration: 50 },
60
+ { type: 'pointerUp', button: 0 },
61
+ ],
62
+ },
63
+ ];
64
+ await performActions(driver, operation);
65
+ } else if (platform === PLATFORM.ios) {
66
+ // Use iOS mobile: doubleTap execute method
67
+ await execute(driver, 'mobile: doubleTap', {
68
+ elementId: args.elementUUID,
69
+ });
70
+ } else {
71
+ throw new Error(
72
+ `Unsupported platform: ${platform}. Only Android and iOS are supported.`
73
+ );
74
+ }
75
+
76
+ return {
77
+ content: [
78
+ {
79
+ type: 'text',
80
+ text: `Successfully performed double tap on element ${args.elementUUID}`,
81
+ },
82
+ ],
83
+ };
84
+ } catch (err: any) {
85
+ return {
86
+ content: [
87
+ {
88
+ type: 'text',
89
+ text: `Failed to perform double tap on element ${args.elementUUID}. Error: ${err.toString()}`,
90
+ },
91
+ ],
92
+ };
93
+ }
94
+ },
95
+ });
96
+ }
@@ -0,0 +1,236 @@
1
+ import { FastMCP } from 'fastmcp';
2
+ import { z } from 'zod';
3
+ import {
4
+ getDriver,
5
+ getPlatformName,
6
+ isAndroidUiautomator2DriverSession,
7
+ isRemoteDriverSession,
8
+ isXCUITestDriverSession,
9
+ } from '../../session-store.js';
10
+ import { elementUUIDScheme } from '../../schema.js';
11
+ import type { Client } from 'webdriver';
12
+ import { getElementRect, getWindowRect } from '../../command.js';
13
+
14
+ const DROP_PAUSE_DURATION_MS = 150;
15
+
16
+ async function performDragAndDrop(
17
+ driver: any,
18
+ startX: number,
19
+ startY: number,
20
+ endX: number,
21
+ endY: number,
22
+ duration: number,
23
+ longPressDuration: number
24
+ ): Promise<void> {
25
+ await driver.performActions([
26
+ {
27
+ type: 'pointer',
28
+ id: 'finger1',
29
+ parameters: { pointerType: 'touch' },
30
+ actions: [
31
+ { type: 'pointerMove', duration: 0, x: startX, y: startY },
32
+ { type: 'pointerDown', button: 0 },
33
+ { type: 'pause', duration: longPressDuration },
34
+ { type: 'pointerMove', duration, x: endX, y: endY },
35
+ { type: 'pause', duration: DROP_PAUSE_DURATION_MS },
36
+ { type: 'pointerUp', button: 0 },
37
+ ],
38
+ },
39
+ ]);
40
+ }
41
+
42
+ export default function dragAndDrop(server: FastMCP): void {
43
+ const dragAndDropSchema = z.object({
44
+ sourceElementUUID: elementUUIDScheme
45
+ .trim()
46
+ .min(1)
47
+ .optional()
48
+ .describe(
49
+ 'UUID of the source element to drag from. Either sourceElementUUID or sourceX/sourceY must be provided.'
50
+ ),
51
+ sourceX: z
52
+ .number()
53
+ .int()
54
+ .min(0)
55
+ .optional()
56
+ .describe(
57
+ 'Starting X coordinate. Required if sourceElementUUID is not provided.'
58
+ ),
59
+ sourceY: z
60
+ .number()
61
+ .int()
62
+ .min(0)
63
+ .optional()
64
+ .describe(
65
+ 'Starting Y coordinate. Required if sourceElementUUID is not provided.'
66
+ ),
67
+ targetElementUUID: elementUUIDScheme
68
+ .trim()
69
+ .min(1)
70
+ .optional()
71
+ .describe(
72
+ 'UUID of the target element to drop on. Either targetElementUUID or targetX/targetY must be provided.'
73
+ ),
74
+ targetX: z
75
+ .number()
76
+ .int()
77
+ .min(0)
78
+ .optional()
79
+ .describe(
80
+ 'Ending X coordinate. Required if targetElementUUID is not provided.'
81
+ ),
82
+ targetY: z
83
+ .number()
84
+ .int()
85
+ .min(0)
86
+ .optional()
87
+ .describe(
88
+ 'Ending Y coordinate. Required if targetElementUUID is not provided.'
89
+ ),
90
+ duration: z
91
+ .number()
92
+ .int()
93
+ .min(100)
94
+ .max(5000)
95
+ .default(1200)
96
+ .optional()
97
+ .describe(
98
+ 'Duration of the drag movement in milliseconds. Default is 1200ms.'
99
+ ),
100
+ longPressDuration: z
101
+ .number()
102
+ .int()
103
+ .min(400)
104
+ .max(2000)
105
+ .default(600)
106
+ .optional()
107
+ .describe(
108
+ 'Duration of the long press before dragging in milliseconds. Default is 600ms.'
109
+ ),
110
+ });
111
+
112
+ server.addTool({
113
+ name: 'appium_drag_and_drop',
114
+ description: `Perform a drag and drop gesture from a source location to a target location.
115
+ The gesture includes:
116
+ 1. Long press (default 600ms, configurable) on the source to initiate drag mode
117
+ 2. While holding, drag to the target location
118
+ 3. Release at the target to complete the drop
119
+
120
+ Supports four modes:
121
+ 1. Element to Element: Drag from one element to another element
122
+ 2. Element to Coordinates: Drag from an element to specific coordinates
123
+ 3. Coordinates to Element: Drag from coordinates to an element
124
+ 4. Coordinates to Coordinates: Drag from coordinates to coordinates
125
+
126
+ This is useful for reordering lists, moving items, drag-to-delete, and other drag interactions.`,
127
+ parameters: dragAndDropSchema,
128
+ annotations: {
129
+ readOnlyHint: false,
130
+ openWorldHint: false,
131
+ },
132
+ execute: async (args: any, context: any): Promise<any> => {
133
+ const driver = getDriver();
134
+ if (!driver) {
135
+ throw new Error('No driver found');
136
+ }
137
+
138
+ try {
139
+ const platform = getPlatformName(driver);
140
+ const duration = args.duration || 1200;
141
+ const longPressDuration = args.longPressDuration || 600;
142
+
143
+ if (
144
+ !args.sourceElementUUID &&
145
+ (args.sourceX === undefined || args.sourceY === undefined)
146
+ ) {
147
+ throw new Error(
148
+ 'Either sourceElementUUID or both sourceX and sourceY must be provided.'
149
+ );
150
+ }
151
+
152
+ if (
153
+ !args.targetElementUUID &&
154
+ (args.targetX === undefined || args.targetY === undefined)
155
+ ) {
156
+ throw new Error(
157
+ 'Either targetElementUUID or both targetX and targetY must be provided.'
158
+ );
159
+ }
160
+
161
+ let startX: number, startY: number;
162
+ let endX: number, endY: number;
163
+ if (args.sourceElementUUID) {
164
+ const rect = await getElementRect(driver, args.sourceElementUUID);
165
+ startX = Math.floor(rect.x + rect.width / 2);
166
+ startY = Math.floor(rect.y + rect.height / 2);
167
+ } else {
168
+ startX = args.sourceX;
169
+ startY = args.sourceY;
170
+ }
171
+
172
+ if (args.targetElementUUID) {
173
+ const rect = await getElementRect(driver, args.targetElementUUID);
174
+ endX = Math.floor(rect.x + rect.width / 2);
175
+ endY = Math.floor(rect.y + rect.height / 2);
176
+ } else {
177
+ endX = args.targetX;
178
+ endY = args.targetY;
179
+ }
180
+
181
+ const { width, height } = await getWindowRect(driver);
182
+ if (startX < 0 || startX >= width || startY < 0 || startY >= height) {
183
+ throw new Error(
184
+ `Source coordinates (${startX}, ${startY}) are out of screen bounds (${width}x${height})`
185
+ );
186
+ }
187
+ if (endX < 0 || endX >= width || endY < 0 || endY >= height) {
188
+ throw new Error(
189
+ `Target coordinates (${endX}, ${endY}) are out of screen bounds (${width}x${height})`
190
+ );
191
+ }
192
+
193
+ if (platform === 'Android' || platform === 'iOS') {
194
+ await performDragAndDrop(
195
+ driver,
196
+ startX,
197
+ startY,
198
+ endX,
199
+ endY,
200
+ duration,
201
+ longPressDuration
202
+ );
203
+ } else {
204
+ throw new Error(
205
+ `Unsupported platform: ${platform}. Only Android and iOS are supported.`
206
+ );
207
+ }
208
+
209
+ const sourceDesc = args.sourceElementUUID
210
+ ? `element ${args.sourceElementUUID}`
211
+ : `coordinates (${startX}, ${startY})`;
212
+ const targetDesc = args.targetElementUUID
213
+ ? `element ${args.targetElementUUID}`
214
+ : `coordinates (${endX}, ${endY})`;
215
+
216
+ return {
217
+ content: [
218
+ {
219
+ type: 'text',
220
+ text: `Successfully performed drag and drop from ${sourceDesc} to ${targetDesc}.`,
221
+ },
222
+ ],
223
+ };
224
+ } catch (err: any) {
225
+ return {
226
+ content: [
227
+ {
228
+ type: 'text',
229
+ text: `Failed to perform drag and drop. Error: ${err.toString()}`,
230
+ },
231
+ ],
232
+ };
233
+ }
234
+ },
235
+ });
236
+ }
@@ -0,0 +1,58 @@
1
+ import { FastMCP } from 'fastmcp';
2
+ import { z } from 'zod';
3
+ import { getDriver } from '../../session-store.js';
4
+
5
+ export const findElementSchema = z.object({
6
+ strategy: z.enum([
7
+ 'xpath',
8
+ 'id',
9
+ 'name',
10
+ 'class name',
11
+ 'accessibility id',
12
+ 'css selector',
13
+ '-android uiautomator',
14
+ '-ios predicate string',
15
+ '-ios class chain',
16
+ ]),
17
+ selector: z.string().describe('The selector to find the element'),
18
+ });
19
+
20
+ export default function findElement(server: FastMCP): void {
21
+ server.addTool({
22
+ name: 'appium_find_element',
23
+ description:
24
+ 'Find an element with the given strategy and selector which will return a uuid that can be used while interaction',
25
+ parameters: findElementSchema,
26
+ annotations: {
27
+ readOnlyHint: false,
28
+ openWorldHint: false,
29
+ },
30
+ execute: async (args: any, context: any): Promise<any> => {
31
+ const driver = getDriver();
32
+ if (!driver) {
33
+ throw new Error('No driver found');
34
+ }
35
+
36
+ try {
37
+ const element = await driver.findElement(args.strategy, args.selector);
38
+ return {
39
+ content: [
40
+ {
41
+ type: 'text',
42
+ text: `Successfully found element ${args.selector} with strategy ${args.strategy}. Element id ${element['element-6066-11e4-a52e-4f735466cecf']}`,
43
+ },
44
+ ],
45
+ };
46
+ } catch (err: any) {
47
+ return {
48
+ content: [
49
+ {
50
+ type: 'text',
51
+ text: `Failed to find element ${args.selector} with strategy ${args.strategy}. err: ${err.toString()}`,
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ },
57
+ });
58
+ }
@@ -0,0 +1,65 @@
1
+ import { FastMCP } from 'fastmcp';
2
+ import { z } from 'zod';
3
+ import { getDriver } from '../../session-store.js';
4
+ import {
5
+ createUIResource,
6
+ createPageSourceInspectorUI,
7
+ addUIResourceToResponse,
8
+ } from '../../ui/mcp-ui-utils.js';
9
+ import { getPageSource as _getPageSource } from '../../command.js';
10
+
11
+ export default function getPageSource(server: FastMCP): void {
12
+ server.addTool({
13
+ name: 'appium_get_page_source',
14
+ description: 'Get the page source (XML) from the current screen',
15
+ parameters: z.object({}),
16
+ annotations: {
17
+ readOnlyHint: true,
18
+ openWorldHint: false,
19
+ },
20
+ execute: async (args: any, context: any): Promise<any> => {
21
+ const driver = getDriver();
22
+ if (!driver) {
23
+ throw new Error('No driver found. Please create a session first.');
24
+ }
25
+
26
+ try {
27
+ const pageSource = await _getPageSource(driver);
28
+ if (!pageSource) {
29
+ throw new Error('Page source is empty or null');
30
+ }
31
+
32
+ const textResponse = {
33
+ content: [
34
+ {
35
+ type: 'text',
36
+ text:
37
+ 'Page source retrieved successfully: \n' +
38
+ '```xml ' +
39
+ pageSource +
40
+ '```',
41
+ },
42
+ ],
43
+ };
44
+
45
+ // Add interactive page source inspector UI
46
+ const uiResource = createUIResource(
47
+ `ui://appium-mcp/page-source-inspector/${Date.now()}`,
48
+ createPageSourceInspectorUI(pageSource)
49
+ );
50
+
51
+ return addUIResourceToResponse(textResponse, uiResource);
52
+ } catch (err: any) {
53
+ return {
54
+ content: [
55
+ {
56
+ type: 'text',
57
+ text: `Failed to get page source. Error: ${err.toString()}`,
58
+ },
59
+ ],
60
+ isError: true,
61
+ };
62
+ }
63
+ },
64
+ });
65
+ }