appium-mcp 1.8.15 → 1.8.16

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 (436) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +2 -1
  3. package/server.json +2 -2
  4. package/src/command.ts +249 -0
  5. package/src/devicemanager/adb-manager.ts +164 -0
  6. package/src/devicemanager/ios-manager.ts +145 -0
  7. package/src/index.ts +45 -0
  8. package/src/locators/element-filter.ts +136 -0
  9. package/src/locators/generate-all-locators.ts +150 -0
  10. package/src/locators/locator-generation.ts +657 -0
  11. package/src/locators/source-parsing.ts +149 -0
  12. package/src/logger.ts +11 -0
  13. package/src/resources/caps.json +697 -0
  14. package/src/resources/index.ts +8 -0
  15. package/src/resources/java/template.ts +83 -0
  16. package/src/resources/submodules/appium/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  17. package/src/resources/submodules/appium/CHANGELOG.md +45 -0
  18. package/src/resources/submodules/appium/CONDUCT.md +48 -0
  19. package/src/resources/submodules/appium/GOVERNANCE.md +185 -0
  20. package/src/resources/submodules/appium/IDEAS.md +16 -0
  21. package/src/resources/submodules/appium/README.md +221 -0
  22. package/src/resources/submodules/appium/ROADMAP.md +30 -0
  23. package/src/resources/submodules/appium/SPONSORS.md +3 -0
  24. package/src/resources/submodules/appium/docs/README.md +6 -0
  25. package/src/resources/submodules/appium/docs/payout.md +35 -0
  26. package/src/resources/submodules/appium/packages/appium/CHANGELOG.md +1437 -0
  27. package/src/resources/submodules/appium/packages/appium/README.md +221 -0
  28. package/src/resources/submodules/appium/packages/appium/docs/en/blog/index.md +2 -0
  29. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-appiumconf2024.md +45 -0
  30. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  31. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  32. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-strategic-partner.md +42 -0
  33. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  34. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sponsorship-program.md +48 -0
  35. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/appium3.md +40 -0
  36. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/hello-world.md +15 -0
  37. package/src/resources/submodules/appium/packages/appium/docs/en/contributing/index.md +150 -0
  38. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-docs.md +86 -0
  39. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-doctor-checks.md +141 -0
  40. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-drivers.md +860 -0
  41. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-plugins.md +514 -0
  42. package/src/resources/submodules/appium/packages/appium/docs/en/developing/config-system.md +451 -0
  43. package/src/resources/submodules/appium/packages/appium/docs/en/developing/index.md +18 -0
  44. package/src/resources/submodules/appium/packages/appium/docs/en/developing/sensitive.md +49 -0
  45. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/clients.md +132 -0
  46. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/drivers.md +207 -0
  47. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/index.md +45 -0
  48. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/plugins.md +138 -0
  49. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/tools.md +83 -0
  50. package/src/resources/submodules/appium/packages/appium/docs/en/guides/branch-testing.md +57 -0
  51. package/src/resources/submodules/appium/packages/appium/docs/en/guides/caching.md +76 -0
  52. package/src/resources/submodules/appium/packages/appium/docs/en/guides/caps.md +275 -0
  53. package/src/resources/submodules/appium/packages/appium/docs/en/guides/config.md +98 -0
  54. package/src/resources/submodules/appium/packages/appium/docs/en/guides/context.md +44 -0
  55. package/src/resources/submodules/appium/packages/appium/docs/en/guides/event-timing.md +73 -0
  56. package/src/resources/submodules/appium/packages/appium/docs/en/guides/execute-methods.md +122 -0
  57. package/src/resources/submodules/appium/packages/appium/docs/en/guides/grid.md +166 -0
  58. package/src/resources/submodules/appium/packages/appium/docs/en/guides/headers.md +17 -0
  59. package/src/resources/submodules/appium/packages/appium/docs/en/guides/log-filters.md +86 -0
  60. package/src/resources/submodules/appium/packages/appium/docs/en/guides/managing-exts.md +87 -0
  61. package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-1-to-2.md +368 -0
  62. package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-2-to-3.md +464 -0
  63. package/src/resources/submodules/appium/packages/appium/docs/en/guides/security.md +89 -0
  64. package/src/resources/submodules/appium/packages/appium/docs/en/guides/settings.md +68 -0
  65. package/src/resources/submodules/appium/packages/appium/docs/en/guides/tls.md +42 -0
  66. package/src/resources/submodules/appium/packages/appium/docs/en/index.md +59 -0
  67. package/src/resources/submodules/appium/packages/appium/docs/en/intro/appium.md +202 -0
  68. package/src/resources/submodules/appium/packages/appium/docs/en/intro/clients.md +127 -0
  69. package/src/resources/submodules/appium/packages/appium/docs/en/intro/drivers.md +188 -0
  70. package/src/resources/submodules/appium/packages/appium/docs/en/intro/history.md +196 -0
  71. package/src/resources/submodules/appium/packages/appium/docs/en/intro/index.md +39 -0
  72. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/index.md +29 -0
  73. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/install.md +50 -0
  74. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/next-steps.md +23 -0
  75. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/requirements.md +29 -0
  76. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-dotnet.md +105 -0
  77. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-java.md +23 -0
  78. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-js.md +75 -0
  79. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-py.md +60 -0
  80. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-rb.md +83 -0
  81. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/uiauto2-driver.md +144 -0
  82. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/appium.md +394 -0
  83. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/bidi.md +70 -0
  84. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/index.md +30 -0
  85. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/jsonwp.md +214 -0
  86. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/mjsonwp.md +151 -0
  87. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/others.md +671 -0
  88. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/plugins.md +289 -0
  89. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/webdriver.md +1114 -0
  90. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/env-vars.md +31 -0
  91. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/extensions.md +239 -0
  92. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/index.md +35 -0
  93. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/server.md +76 -0
  94. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/setup.md +76 -0
  95. package/src/resources/submodules/appium/packages/appium/docs/en/reference/index.md +25 -0
  96. package/src/resources/submodules/appium/packages/appium/docs/en/resources/index.md +28 -0
  97. package/src/resources/submodules/appium/packages/appium/docs/en/sponsors/index.md +64 -0
  98. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/index.md +2 -0
  99. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-appiumconf2024.md +45 -0
  100. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  101. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  102. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
  103. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  104. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sponsorship-program.md +48 -0
  105. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/appium3.md +40 -0
  106. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/hello-world.md +15 -0
  107. package/src/resources/submodules/appium/packages/appium/docs/ja/contributing/index.md +158 -0
  108. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-docs.md +86 -0
  109. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-doctor-checks.md +141 -0
  110. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-drivers.md +866 -0
  111. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-plugins.md +520 -0
  112. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/config-system.md +468 -0
  113. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/index.md +18 -0
  114. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/sensitive.md +49 -0
  115. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/clients.md +143 -0
  116. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/drivers.md +219 -0
  117. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/index.md +45 -0
  118. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/plugins.md +140 -0
  119. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/tools.md +87 -0
  120. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/branch-testing.md +57 -0
  121. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caching.md +78 -0
  122. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caps.md +259 -0
  123. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/config.md +102 -0
  124. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/context.md +44 -0
  125. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/event-timing.md +75 -0
  126. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/execute-methods.md +142 -0
  127. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/grid.md +166 -0
  128. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/headers.md +17 -0
  129. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/log-filters.md +86 -0
  130. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/managing-exts.md +89 -0
  131. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-1-to-2.md +402 -0
  132. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-2-to-3.md +458 -0
  133. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/security.md +89 -0
  134. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/settings.md +70 -0
  135. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/tls.md +43 -0
  136. package/src/resources/submodules/appium/packages/appium/docs/ja/index.md +55 -0
  137. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/appium.md +191 -0
  138. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/clients.md +139 -0
  139. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/drivers.md +188 -0
  140. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/history.md +196 -0
  141. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/index.md +39 -0
  142. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/index.md +23 -0
  143. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/install.md +47 -0
  144. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/next-steps.md +19 -0
  145. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/requirements.md +29 -0
  146. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-dotnet.md +107 -0
  147. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-java.md +23 -0
  148. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-js.md +77 -0
  149. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-py.md +63 -0
  150. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-rb.md +85 -0
  151. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/uiauto2-driver.md +148 -0
  152. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/appium.md +395 -0
  153. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/bidi.md +71 -0
  154. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/index.md +30 -0
  155. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/jsonwp.md +215 -0
  156. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/mjsonwp.md +152 -0
  157. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/others.md +672 -0
  158. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/plugins.md +291 -0
  159. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/webdriver.md +1114 -0
  160. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/env-vars.md +31 -0
  161. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/extensions.md +240 -0
  162. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/index.md +35 -0
  163. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/server.md +76 -0
  164. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/setup.md +78 -0
  165. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/index.md +25 -0
  166. package/src/resources/submodules/appium/packages/appium/docs/ja/resources/index.md +28 -0
  167. package/src/resources/submodules/appium/packages/appium/docs/ja/sponsors/index.md +61 -0
  168. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz-white.png +0 -0
  169. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png +0 -0
  170. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-white.png +0 -0
  171. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo.png +0 -0
  172. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png +0 -0
  173. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-light.png +0 -0
  174. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png +0 -0
  175. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png +0 -0
  176. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-sauce.png +0 -0
  177. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/index.md +2 -0
  178. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-appiumconf2024.md +45 -0
  179. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  180. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  181. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
  182. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  183. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sponsorship-program.md +48 -0
  184. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/appium3.md +40 -0
  185. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/hello-world.md +15 -0
  186. package/src/resources/submodules/appium/packages/appium/docs/zh/contributing/index.md +132 -0
  187. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-docs.md +86 -0
  188. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-doctor-checks.md +141 -0
  189. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-drivers.md +866 -0
  190. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-plugins.md +520 -0
  191. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/config-system.md +468 -0
  192. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/index.md +18 -0
  193. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/sensitive.md +49 -0
  194. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/clients.md +143 -0
  195. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/drivers.md +219 -0
  196. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/index.md +45 -0
  197. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/plugins.md +140 -0
  198. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/tools.md +87 -0
  199. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/branch-testing.md +57 -0
  200. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caching.md +78 -0
  201. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caps.md +284 -0
  202. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/config.md +102 -0
  203. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/context.md +44 -0
  204. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/event-timing.md +75 -0
  205. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/execute-methods.md +142 -0
  206. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/grid.md +166 -0
  207. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/headers.md +17 -0
  208. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/log-filters.md +86 -0
  209. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/managing-exts.md +89 -0
  210. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-1-to-2.md +410 -0
  211. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-2-to-3.md +459 -0
  212. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/security.md +89 -0
  213. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/settings.md +70 -0
  214. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/tls.md +43 -0
  215. package/src/resources/submodules/appium/packages/appium/docs/zh/index.md +54 -0
  216. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/appium.md +200 -0
  217. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/clients.md +139 -0
  218. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/drivers.md +188 -0
  219. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/history.md +196 -0
  220. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/index.md +39 -0
  221. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/index.md +23 -0
  222. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/install.md +47 -0
  223. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/next-steps.md +19 -0
  224. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/requirements.md +21 -0
  225. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-dotnet.md +99 -0
  226. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-java.md +20 -0
  227. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-js.md +62 -0
  228. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-py.md +57 -0
  229. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-rb.md +80 -0
  230. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/uiauto2-driver.md +148 -0
  231. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/appium.md +395 -0
  232. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/bidi.md +71 -0
  233. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/index.md +30 -0
  234. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/jsonwp.md +215 -0
  235. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/mjsonwp.md +152 -0
  236. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/others.md +672 -0
  237. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/plugins.md +291 -0
  238. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/webdriver.md +1114 -0
  239. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/env-vars.md +31 -0
  240. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/extensions.md +240 -0
  241. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/index.md +35 -0
  242. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/server.md +76 -0
  243. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/setup.md +78 -0
  244. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/index.md +25 -0
  245. package/src/resources/submodules/appium/packages/appium/docs/zh/resources/index.md +28 -0
  246. package/src/resources/submodules/appium/packages/appium/docs/zh/sponsors/index.md +61 -0
  247. package/src/resources/submodules/appium/packages/appium/types/manifest/README.md +30 -0
  248. package/src/resources/submodules/appium/packages/base-driver/CHANGELOG.md +1131 -0
  249. package/src/resources/submodules/appium/packages/base-driver/README.md +15 -0
  250. package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/errors.md +82 -0
  251. package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/protocol-methods.md +182 -0
  252. package/src/resources/submodules/appium/packages/base-driver/static/appium.png +0 -0
  253. package/src/resources/submodules/appium/packages/base-plugin/CHANGELOG.md +672 -0
  254. package/src/resources/submodules/appium/packages/base-plugin/README.md +15 -0
  255. package/src/resources/submodules/appium/packages/docutils/CHANGELOG.md +948 -0
  256. package/src/resources/submodules/appium/packages/docutils/README.md +27 -0
  257. package/src/resources/submodules/appium/packages/driver-test-support/CHANGELOG.md +717 -0
  258. package/src/resources/submodules/appium/packages/driver-test-support/README.md +112 -0
  259. package/src/resources/submodules/appium/packages/eslint-config-appium-ts/CHANGELOG.md +168 -0
  260. package/src/resources/submodules/appium/packages/eslint-config-appium-ts/README.md +33 -0
  261. package/src/resources/submodules/appium/packages/execute-driver-plugin/CHANGELOG.md +603 -0
  262. package/src/resources/submodules/appium/packages/execute-driver-plugin/README.md +42 -0
  263. package/src/resources/submodules/appium/packages/fake-driver/CHANGELOG.md +545 -0
  264. package/src/resources/submodules/appium/packages/fake-driver/README.md +7 -0
  265. package/src/resources/submodules/appium/packages/fake-driver/lib/screen.png +0 -0
  266. package/src/resources/submodules/appium/packages/fake-plugin/CHANGELOG.md +683 -0
  267. package/src/resources/submodules/appium/packages/fake-plugin/README.md +7 -0
  268. package/src/resources/submodules/appium/packages/images-plugin/CHANGELOG.md +602 -0
  269. package/src/resources/submodules/appium/packages/images-plugin/README.md +27 -0
  270. package/src/resources/submodules/appium/packages/images-plugin/docs/find-by-image.md +65 -0
  271. package/src/resources/submodules/appium/packages/images-plugin/docs/image-comparison.md +203 -0
  272. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/appstore.png +0 -0
  273. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img1.png +0 -0
  274. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2.png +0 -0
  275. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2_part.png +0 -0
  276. package/src/resources/submodules/appium/packages/logger/CHANGELOG.md +162 -0
  277. package/src/resources/submodules/appium/packages/logger/README.md +31 -0
  278. package/src/resources/submodules/appium/packages/opencv/CHANGELOG.md +384 -0
  279. package/src/resources/submodules/appium/packages/opencv/README.md +68 -0
  280. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/appium-diagram.jpg +0 -0
  281. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc1.png +0 -0
  282. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc2.png +0 -0
  283. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc_rotated.png +0 -0
  284. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/findwaldo.jpg +0 -0
  285. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/number5.png +0 -0
  286. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/waldo.jpg +0 -0
  287. package/src/resources/submodules/appium/packages/plugin-test-support/CHANGELOG.md +539 -0
  288. package/src/resources/submodules/appium/packages/plugin-test-support/README.md +49 -0
  289. package/src/resources/submodules/appium/packages/relaxed-caps-plugin/CHANGELOG.md +154 -0
  290. package/src/resources/submodules/appium/packages/relaxed-caps-plugin/README.md +35 -0
  291. package/src/resources/submodules/appium/packages/schema/CHANGELOG.md +271 -0
  292. package/src/resources/submodules/appium/packages/schema/README.md +50 -0
  293. package/src/resources/submodules/appium/packages/storage-plugin/CHANGELOG.md +73 -0
  294. package/src/resources/submodules/appium/packages/storage-plugin/README.md +83 -0
  295. package/src/resources/submodules/appium/packages/strongbox/CHANGELOG.md +94 -0
  296. package/src/resources/submodules/appium/packages/strongbox/README.md +96 -0
  297. package/src/resources/submodules/appium/packages/support/CHANGELOG.md +1054 -0
  298. package/src/resources/submodules/appium/packages/support/README.md +161 -0
  299. package/src/resources/submodules/appium/packages/test-support/CHANGELOG.md +712 -0
  300. package/src/resources/submodules/appium/packages/test-support/README.md +61 -0
  301. package/src/resources/submodules/appium/packages/tsconfig/CHANGELOG.md +131 -0
  302. package/src/resources/submodules/appium/packages/tsconfig/README.md +19 -0
  303. package/src/resources/submodules/appium/packages/types/CHANGELOG.md +793 -0
  304. package/src/resources/submodules/appium/packages/types/README.md +21 -0
  305. package/src/resources/submodules/appium/packages/universal-xml-plugin/CHANGELOG.md +435 -0
  306. package/src/resources/submodules/appium/packages/universal-xml-plugin/README.md +53 -0
  307. package/src/resources/submodules/appium/renovate/README.md +63 -0
  308. package/src/resources/submodules/appium-uiautomator2-driver/CHANGELOG.md +1204 -0
  309. package/src/resources/submodules/appium-uiautomator2-driver/README.md +2077 -0
  310. package/src/resources/submodules/appium-uiautomator2-driver/docs/actions.md +72 -0
  311. package/src/resources/submodules/appium-uiautomator2-driver/docs/activity-startup.md +47 -0
  312. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-appbundle.md +69 -0
  313. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-mobile-gestures.md +352 -0
  314. package/src/resources/submodules/appium-uiautomator2-driver/docs/bidi.md +50 -0
  315. package/src/resources/submodules/appium-uiautomator2-driver/docs/capability-sets.md +136 -0
  316. package/src/resources/submodules/appium-uiautomator2-driver/docs/scheduled-actions.md +155 -0
  317. package/src/resources/submodules/appium-uiautomator2-driver/docs/uiautomator-uiselector.md +51 -0
  318. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/main.md +95 -0
  319. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen1.png +0 -0
  320. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen2.png +0 -0
  321. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/checkered-squares.png +0 -0
  322. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/start-button.png +0 -0
  323. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/stop-button.png +0 -0
  324. package/src/resources/submodules/appium-xcuitest-driver/.github/ISSUE_TEMPLATE.md +4 -0
  325. package/src/resources/submodules/appium-xcuitest-driver/CHANGELOG.md +2594 -0
  326. package/src/resources/submodules/appium-xcuitest-driver/README.md +55 -0
  327. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo-white.png +0 -0
  328. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo.png +0 -0
  329. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-plus-xctest.png +0 -0
  330. package/src/resources/submodules/appium-xcuitest-driver/docs/contributing.md +45 -0
  331. package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints-wda.md +61 -0
  332. package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints.md +98 -0
  333. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/keynote.png +0 -0
  334. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/on_my_iphone.png +0 -0
  335. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/top_files.png +0 -0
  336. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/attach-to-running-wda.md +43 -0
  337. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/audio-capture.md +78 -0
  338. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/capability-sets.md +169 -0
  339. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/ci-setup.md +47 -0
  340. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/clipboard.md +47 -0
  341. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/elements-lookup-troubleshooting.md +158 -0
  342. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/file-transfer.md +147 -0
  343. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/gestures.md +52 -0
  344. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/hybrid.md +137 -0
  345. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/input-events.md +67 -0
  346. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/install-certificate.md +19 -0
  347. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/multiple-xcode-versions.md +37 -0
  348. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/parallel-tests.md +39 -0
  349. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-prebuilt-wda.md +135 -0
  350. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-preinstalled-wda.md +178 -0
  351. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/touch-id.md +33 -0
  352. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/troubleshooting.md +191 -0
  353. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/tvos.md +114 -0
  354. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-custom-server.md +283 -0
  355. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-slowness.md +231 -0
  356. package/src/resources/submodules/appium-xcuitest-driver/docs/index.md +36 -0
  357. package/src/resources/submodules/appium-xcuitest-driver/docs/installation/index.md +137 -0
  358. package/src/resources/submodules/appium-xcuitest-driver/docs/overview.md +19 -0
  359. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/check-prov-prof.png +0 -0
  360. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-new-project.png +0 -0
  361. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-single-page.png +0 -0
  362. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/no-prov-prof.png +0 -0
  363. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/project-prov-prof.png +0 -0
  364. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/set-up-bundle.png +0 -0
  365. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/untrusted-dev.png +0 -0
  366. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-bundle-id.png +0 -0
  367. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-config.png +0 -0
  368. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-fail.png +0 -0
  369. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-succeed.png +0 -0
  370. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/index.md +51 -0
  371. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-auto.md +49 -0
  372. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-manual.md +40 -0
  373. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-full-manual.md +50 -0
  374. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-generic-manual.md +49 -0
  375. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/real-device-config.md +100 -0
  376. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/assets/images/useXctestrunFile.png +0 -0
  377. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/bidi.md +75 -0
  378. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/capabilities.md +165 -0
  379. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/commands.md +490 -0
  380. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/element-attributes.md +27 -0
  381. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/execute-methods.md +2206 -0
  382. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/ios-predicate.md +196 -0
  383. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/locator-strategies.md +19 -0
  384. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/scripts.md +29 -0
  385. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/security-flags.md +22 -0
  386. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/server-args.md +16 -0
  387. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/settings.md +49 -0
  388. package/src/resources/submodules/appium-xcuitest-driver/test/assets/TestApp-iphonesimulator.app/Default-568h@2x.png +0 -0
  389. package/src/resources/submodules/appium-xcuitest-driver/test/assets/test.png +0 -0
  390. package/src/schema.ts +5 -0
  391. package/src/scripts/simple-index-documentation.ts +93 -0
  392. package/src/scripts/simple-query-documentation.ts +61 -0
  393. package/src/server.ts +40 -0
  394. package/src/session-store.ts +151 -0
  395. package/src/tests/README.md +83 -0
  396. package/src/tests/__mocks__/@appium/support.ts +30 -0
  397. package/src/tests/generate-all-locators.test.ts +178 -0
  398. package/src/tests/screenshot.test.ts +279 -0
  399. package/src/tests/test-setup-wda.ts +255 -0
  400. package/src/tools/README.md +179 -0
  401. package/src/tools/app-management/activate-app.ts +47 -0
  402. package/src/tools/app-management/install-app.ts +46 -0
  403. package/src/tools/app-management/list-apps.ts +87 -0
  404. package/src/tools/app-management/terminate-app.ts +48 -0
  405. package/src/tools/app-management/uninstall-app.ts +48 -0
  406. package/src/tools/context/get-contexts.ts +87 -0
  407. package/src/tools/context/switch-context.ts +101 -0
  408. package/src/tools/documentation/answer-appium.ts +73 -0
  409. package/src/tools/documentation/index.ts +98 -0
  410. package/src/tools/documentation/reasoning-rag.ts +435 -0
  411. package/src/tools/documentation/sentence-transformers-embeddings.ts +144 -0
  412. package/src/tools/documentation/simple-pdf-indexer.ts +508 -0
  413. package/src/tools/documentation/uploads/documents.json +1 -0
  414. package/src/tools/index.ts +159 -0
  415. package/src/tools/interactions/click.ts +48 -0
  416. package/src/tools/interactions/double-tap.ts +96 -0
  417. package/src/tools/interactions/drag-and-drop.ts +236 -0
  418. package/src/tools/interactions/find.ts +58 -0
  419. package/src/tools/interactions/get-page-source.ts +65 -0
  420. package/src/tools/interactions/get-text.ts +48 -0
  421. package/src/tools/interactions/long-press.ts +111 -0
  422. package/src/tools/interactions/screenshot.ts +116 -0
  423. package/src/tools/interactions/set-value.ts +49 -0
  424. package/src/tools/ios/boot-simulator.ts +88 -0
  425. package/src/tools/ios/install-wda.ts +277 -0
  426. package/src/tools/ios/setup-wda.ts +217 -0
  427. package/src/tools/navigations/scroll-to-element.ts +198 -0
  428. package/src/tools/navigations/scroll.ts +101 -0
  429. package/src/tools/navigations/swipe.ts +364 -0
  430. package/src/tools/session/create-session.ts +379 -0
  431. package/src/tools/session/delete-session.ts +56 -0
  432. package/src/tools/session/select-device.ts +326 -0
  433. package/src/tools/session/select-platform.ts +250 -0
  434. package/src/tools/test-generation/generate-tests.ts +48 -0
  435. package/src/tools/test-generation/locators.ts +103 -0
  436. package/src/ui/mcp-ui-utils.ts +1630 -0
@@ -0,0 +1,379 @@
1
+ /**
2
+ * Tool to create a new mobile session (Android or iOS)
3
+ */
4
+ import { z } from 'zod';
5
+ import { access, readFile } from 'node:fs/promises';
6
+ import { constants } from 'node:fs';
7
+ import { URL } from 'node:url';
8
+ import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
9
+ import { XCUITestDriver } from 'appium-xcuitest-driver';
10
+ import {
11
+ setSession,
12
+ hasActiveSession,
13
+ safeDeleteSession,
14
+ } from '../../session-store.js';
15
+ import {
16
+ getSelectedDevice,
17
+ getSelectedDeviceType,
18
+ getSelectedDeviceInfo,
19
+ clearSelectedDevice,
20
+ } from './select-device.js';
21
+ import { IOSManager } from '../../devicemanager/ios-manager.js';
22
+ import log from '../../logger.js';
23
+ import {
24
+ createUIResource,
25
+ createSessionDashboardUI,
26
+ addUIResourceToResponse,
27
+ } from '../../ui/mcp-ui-utils.js';
28
+ import WebDriver from 'webdriver';
29
+
30
+ // Define capabilities type
31
+ interface Capabilities {
32
+ platformName: string;
33
+ 'appium:automationName': string;
34
+ 'appium:deviceName'?: string;
35
+ [key: string]: any;
36
+ }
37
+
38
+ // Define capabilities config type
39
+ interface CapabilitiesConfig {
40
+ android: Record<string, any>;
41
+ ios: Record<string, any>;
42
+ }
43
+
44
+ /**
45
+ * Load capabilities configuration from file if specified in environment
46
+ */
47
+ async function loadCapabilitiesConfig(): Promise<CapabilitiesConfig> {
48
+ const configPath = process.env.CAPABILITIES_CONFIG;
49
+ if (!configPath) {
50
+ return { android: {}, ios: {} };
51
+ }
52
+
53
+ try {
54
+ await access(configPath, constants.F_OK);
55
+ const configContent = await readFile(configPath, 'utf8');
56
+ return JSON.parse(configContent);
57
+ } catch (error) {
58
+ log.warn(`Failed to parse capabilities config: ${error}`);
59
+ return { android: {}, ios: {} };
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Remove empty string values from capabilities object
65
+ */
66
+ function filterEmptyCapabilities(capabilities: Capabilities): Capabilities {
67
+ const filtered = { ...capabilities };
68
+ Object.keys(filtered).forEach((key) => {
69
+ if (filtered[key] === '') {
70
+ delete filtered[key];
71
+ }
72
+ });
73
+ return filtered;
74
+ }
75
+
76
+ /**
77
+ * Build Android capabilities by merging defaults, config, device selection, and custom capabilities
78
+ */
79
+ function buildAndroidCapabilities(
80
+ configCaps: Record<string, any>,
81
+ customCaps: Record<string, any> | undefined,
82
+ isRemoteServer: boolean
83
+ ): Capabilities {
84
+ const defaultCaps: Capabilities = {
85
+ platformName: 'Android',
86
+ 'appium:automationName': 'UiAutomator2',
87
+ 'appium:deviceName': 'Android Device',
88
+ };
89
+
90
+ const selectedDeviceUdid = isRemoteServer ? undefined : getSelectedDevice();
91
+
92
+ const capabilities = {
93
+ ...defaultCaps,
94
+ ...configCaps,
95
+ ...(selectedDeviceUdid && { 'appium:udid': selectedDeviceUdid }),
96
+ ...customCaps,
97
+ };
98
+
99
+ if (selectedDeviceUdid) {
100
+ clearSelectedDevice();
101
+ }
102
+
103
+ return filterEmptyCapabilities(capabilities);
104
+ }
105
+
106
+ /**
107
+ * Validate iOS device selection when multiple devices are available
108
+ */
109
+ async function validateIOSDeviceSelection(
110
+ deviceType: 'simulator' | 'real' | null
111
+ ): Promise<void> {
112
+ if (!deviceType) {
113
+ return;
114
+ }
115
+
116
+ const iosManager = IOSManager.getInstance();
117
+ const devices = await iosManager.getDevicesByType(deviceType);
118
+
119
+ if (devices.length > 1) {
120
+ const selectedDevice = getSelectedDevice();
121
+ if (!selectedDevice) {
122
+ throw new Error(
123
+ `Multiple iOS ${deviceType === 'simulator' ? 'simulators' : 'devices'} found (${devices.length}). Please use the select_device tool to choose which device to use before creating a session.`
124
+ );
125
+ }
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Build iOS capabilities by merging defaults, config, device selection, and custom capabilities
131
+ */
132
+ async function buildIOSCapabilities(
133
+ configCaps: Record<string, any>,
134
+ customCaps: Record<string, any> | undefined,
135
+ isRemoteServer: boolean
136
+ ): Promise<Capabilities> {
137
+ const deviceType = isRemoteServer ? null : getSelectedDeviceType();
138
+ await validateIOSDeviceSelection(deviceType);
139
+
140
+ // Get selected device info BEFORE constructing defaultCaps so we can use the actual device name
141
+ const selectedDeviceUdid = isRemoteServer ? undefined : getSelectedDevice();
142
+ const selectedDeviceInfo = isRemoteServer
143
+ ? undefined
144
+ : getSelectedDeviceInfo();
145
+
146
+ log.debug('Selected device info:', selectedDeviceInfo);
147
+
148
+ const defaultCaps: Capabilities = {
149
+ platformName: 'iOS',
150
+ 'appium:automationName': 'XCUITest',
151
+ 'appium:deviceName': selectedDeviceInfo?.name || 'iPhone Simulator',
152
+ };
153
+
154
+ const platformVersion =
155
+ selectedDeviceInfo?.platform && selectedDeviceInfo.platform.trim() !== ''
156
+ ? selectedDeviceInfo.platform
157
+ : undefined;
158
+
159
+ log.debug('Platform version:', platformVersion);
160
+
161
+ const capabilities = {
162
+ ...defaultCaps,
163
+ // Auto-detected platform version as fallback (before config)
164
+ ...(platformVersion && { 'appium:platformVersion': platformVersion }),
165
+ ...configCaps,
166
+ ...(selectedDeviceUdid && { 'appium:udid': selectedDeviceUdid }),
167
+ ...(deviceType === 'simulator' && {
168
+ 'appium:usePrebuiltWDA': true,
169
+ 'appium:wdaStartupRetries': 4,
170
+ 'appium:wdaStartupRetryInterval': 20000,
171
+ }),
172
+ ...customCaps,
173
+ };
174
+
175
+ if (selectedDeviceUdid) {
176
+ clearSelectedDevice();
177
+ }
178
+
179
+ return filterEmptyCapabilities(capabilities);
180
+ }
181
+
182
+ /**
183
+ * Create the appropriate driver instance for the given platform
184
+ */
185
+ function createDriverForPlatform(platform: 'android' | 'ios'): any {
186
+ if (platform === 'android') {
187
+ return new AndroidUiautomator2Driver();
188
+ }
189
+ if (platform === 'ios') {
190
+ return new XCUITestDriver();
191
+ }
192
+ throw new Error(
193
+ `Unsupported platform: ${platform}. Please choose 'android' or 'ios'.`
194
+ );
195
+ }
196
+
197
+ /**
198
+ * Create a new session with the given driver and capabilities
199
+ */
200
+ async function createDriverSession(
201
+ driver: any,
202
+ capabilities: Capabilities
203
+ ): Promise<string> {
204
+ // @ts-ignore
205
+ const sessionId = await driver.createSession(null, {
206
+ alwaysMatch: capabilities,
207
+ firstMatch: [{}],
208
+ });
209
+ return sessionId;
210
+ }
211
+
212
+ /**
213
+ * Registers a tool for creating a new mobile session with Android or iOS devices.
214
+ *
215
+ * This function adds a 'create_session' tool to the provided server that handles
216
+ * mobile session creation with support for both local and remote Appium servers.
217
+ *
218
+ * @param server - The server instance to which the create_session tool will be added
219
+ *
220
+ * @tool create_session
221
+ * @description Creates a new mobile session with Android or iOS device. Requires prior
222
+ * platform selection via the select_platform tool. Supports both local and remote
223
+ * Appium server connections.
224
+ *
225
+ * @param {Object} args - Tool execution arguments
226
+ * @param {'ios' | 'android'} args.platform - REQUIRED. The target platform, must match
227
+ * the platform explicitly selected via select_platform tool
228
+ * @param {Object} [args.capabilities] - Optional custom W3C format capabilities
229
+ * @param {string} [args.remoteServerUrl] - Optional remote Appium server URL
230
+ * (e.g., http://localhost:4723). If not provided, uses local Appium server
231
+ *
232
+ * @returns {Promise<Object>} Response object containing:
233
+ * - text: Success message with session ID and device details
234
+ * - ui: Interactive session dashboard UI component
235
+ *
236
+ * @throws {Error} If session creation fails or platform capabilities cannot be loaded
237
+ *
238
+ * @example
239
+ * // Register the tool
240
+ * createSession(server);
241
+ */
242
+ export default function createSession(server: any): void {
243
+ server.addTool({
244
+ name: 'create_session',
245
+ description: `Create a new mobile session with Android or iOS device.
246
+ WORKFLOW FOR LOCAL SERVERS (no remoteServerUrl):
247
+ - Use select_platform tool FIRST to ask the user which platform they want
248
+ - Then optionally use select_device tool if multiple devices are available
249
+ - Finally call create_session with the selected platform and device
250
+ - DO NOT assume or default to any platform
251
+ WORKFLOW FOR REMOTE SERVERS (remoteServerUrl provided):
252
+ - SKIP select_platform tool entirely
253
+ - Infer the platform from the user's request (e.g., 'ios', 'android')
254
+ - Infer device type from context when possible (e.g., 'simulator', 'real device')
255
+ - Call create_session directly with platform, remoteServerUrl, and any other capabilities from the user's request
256
+ - Example: User says 'start session with http://localhost:4723 for ios with iphone 17' → infer platform='ios' and call create_session with remoteServerUrl and platform parameters
257
+ `,
258
+ parameters: z.object({
259
+ platform: z.enum(['ios', 'android']).describe(
260
+ `REQUIRED: Platform to use. For local servers, this must match the platform the user explicitly selected via the select_platform tool.
261
+ If remoteServerUrl is provided, the assistant should ask the user to confirm or infer the platform from the conversation; do not assume a default.`
262
+ ),
263
+ capabilities: z
264
+ .object({})
265
+ .optional()
266
+ .describe(
267
+ 'Optional custom W3C format capabilities for the session. Common options include appium:app (app path), appium:deviceName, appium:platformVersion, appium:bundleId, appium:autoGrantPermissions, etc. Custom capabilities override default and config file settings.'
268
+ ),
269
+ remoteServerUrl: z
270
+ .string()
271
+ .optional()
272
+ .describe(
273
+ 'Remote Appium server URL (e.g., http://localhost:4723 or http://192.168.1.100:4723). If not provided, uses local Appium server.'
274
+ ),
275
+ }),
276
+ annotations: {
277
+ readOnlyHint: false,
278
+ openWorldHint: false,
279
+ },
280
+ execute: async (args: any, context: any): Promise<any> => {
281
+ try {
282
+ if (hasActiveSession()) {
283
+ log.info(
284
+ 'Existing session detected, cleaning up before creating new session...'
285
+ );
286
+ try {
287
+ await safeDeleteSession();
288
+ } catch {
289
+ // ok to ignore
290
+ }
291
+ }
292
+
293
+ const {
294
+ platform,
295
+ capabilities: customCapabilities,
296
+ remoteServerUrl,
297
+ } = args;
298
+
299
+ const configCapabilities = await loadCapabilitiesConfig();
300
+ const platformCaps =
301
+ platform === 'android'
302
+ ? configCapabilities.android
303
+ : configCapabilities.ios;
304
+ const finalCapabilities =
305
+ platform === 'android'
306
+ ? buildAndroidCapabilities(
307
+ platformCaps,
308
+ customCapabilities,
309
+ !!remoteServerUrl
310
+ )
311
+ : await buildIOSCapabilities(
312
+ platformCaps,
313
+ customCapabilities,
314
+ !!remoteServerUrl
315
+ );
316
+
317
+ let sessionId;
318
+ if (remoteServerUrl) {
319
+ const remoteUrl = new URL(remoteServerUrl);
320
+ const client = await WebDriver.newSession({
321
+ protocol: remoteUrl.protocol.replace(':', ''),
322
+ hostname: remoteUrl.hostname,
323
+ port: parseInt(remoteUrl.port, 10),
324
+ path: remoteUrl.pathname,
325
+ capabilities: finalCapabilities,
326
+ });
327
+ sessionId = client.sessionId;
328
+ setSession(client, client.sessionId);
329
+ } else {
330
+ log.info(
331
+ `Creating new ${platform.toUpperCase()} session with capabilities:`,
332
+ JSON.stringify(finalCapabilities, null, 2)
333
+ );
334
+
335
+ const driver = createDriverForPlatform(platform);
336
+ sessionId = await createDriverSession(driver, finalCapabilities);
337
+ setSession(driver, sessionId);
338
+ }
339
+
340
+ // Safely convert sessionId to string for display
341
+ const sessionIdStr =
342
+ typeof sessionId === 'string'
343
+ ? sessionId
344
+ : String(sessionId || 'Unknown');
345
+
346
+ log.info(
347
+ `${platform.toUpperCase()} session created successfully with ID: ${sessionIdStr}`
348
+ );
349
+
350
+ const textResponse = {
351
+ content: [
352
+ {
353
+ type: 'text',
354
+ text: `${platform.toUpperCase()} session created successfully with ID: ${sessionIdStr}\nPlatform: ${finalCapabilities.platformName}\nAutomation: ${finalCapabilities['appium:automationName']}\nDevice: ${finalCapabilities['appium:deviceName']}`,
355
+ },
356
+ ],
357
+ };
358
+
359
+ // Add interactive session dashboard UI
360
+ const uiResource = createUIResource(
361
+ `ui://appium-mcp/session-dashboard/${sessionIdStr}`,
362
+ createSessionDashboardUI({
363
+ sessionId: sessionIdStr,
364
+ platform: finalCapabilities.platformName,
365
+ automationName: finalCapabilities['appium:automationName'],
366
+ deviceName: finalCapabilities['appium:deviceName'],
367
+ platformVersion: finalCapabilities['appium:platformVersion'],
368
+ udid: finalCapabilities['appium:udid'],
369
+ })
370
+ );
371
+
372
+ return addUIResourceToResponse(textResponse, uiResource);
373
+ } catch (error: any) {
374
+ log.error('Error creating session:', error);
375
+ throw new Error(`Failed to create session: ${error.message}`);
376
+ }
377
+ },
378
+ });
379
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Tool to delete the current mobile session and clean up resources
3
+ */
4
+ import { z } from 'zod';
5
+ import { safeDeleteSession } from '../../session-store.js';
6
+ import log from '../../logger.js';
7
+
8
+ export default function deleteSession(server: any): void {
9
+ server.addTool({
10
+ name: 'delete_session',
11
+ description: 'Delete the current mobile session and clean up resources.',
12
+ parameters: z.object({}),
13
+ annotations: {
14
+ destructiveHint: true,
15
+ readOnlyHint: false,
16
+ openWorldHint: false,
17
+ },
18
+ execute: async (): Promise<any> => {
19
+ try {
20
+ const deleted = await safeDeleteSession();
21
+
22
+ if (deleted) {
23
+ return {
24
+ content: [
25
+ {
26
+ type: 'text',
27
+ text: 'Session deleted successfully.',
28
+ },
29
+ ],
30
+ };
31
+ } else {
32
+ return {
33
+ content: [
34
+ {
35
+ type: 'text',
36
+ text: 'No active session found or deletion already in progress.',
37
+ },
38
+ ],
39
+ };
40
+ }
41
+ } catch (error: any) {
42
+ log.error(`Error deleting session`, error);
43
+ // don't need to raise an error since session end means anyway we should create a new session
44
+ // to proceed further requests.
45
+ return {
46
+ content: [
47
+ {
48
+ type: 'text',
49
+ text: `Session delete might fail as error ${error}`,
50
+ },
51
+ ],
52
+ };
53
+ }
54
+ },
55
+ });
56
+ }