appium-mcp 1.8.14 → 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 +12 -0
  2. package/package.json +3 -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
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [1.8.16](https://github.com/appium/appium-mcp/compare/v1.8.15...v1.8.16) (2026-01-26)
2
+
3
+ ### Bug Fixes
4
+
5
+ * publish src as well since mcp read documentation under that ([687cd71](https://github.com/appium/appium-mcp/commit/687cd711bdf85766f437aad3654bb978f4119bde))
6
+
7
+ ## [1.8.15](https://github.com/appium/appium-mcp/compare/v1.8.14...v1.8.15) (2026-01-26)
8
+
9
+ ### Bug Fixes
10
+
11
+ * add @langchain/core explicitly ([#131](https://github.com/appium/appium-mcp/issues/131)) ([d0ff1ba](https://github.com/appium/appium-mcp/commit/d0ff1ba42fcc88301735eb1c53f722c1953f48db))
12
+
1
13
  ## [1.8.14](https://github.com/appium/appium-mcp/compare/v1.8.13...v1.8.14) (2026-01-25)
2
14
 
3
15
  ### Miscellaneous Chores
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "appium-mcp",
3
3
  "mcpName": "io.github.appium/appium-mcp",
4
- "version": "1.8.14",
4
+ "version": "1.8.16",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",
@@ -41,6 +41,7 @@
41
41
  "description": "Intelligent MCP server providing AI assistants with powerful tools and resources for Appium mobile automation",
42
42
  "dependencies": {
43
43
  "@appium/support": "^7.0.2",
44
+ "@langchain/core": "^0.3.27",
44
45
  "@langfuse/otel": "^4.2.0",
45
46
  "@langfuse/tracing": "^4.2.0",
46
47
  "@modelcontextprotocol/sdk": "^1.22.0",
@@ -80,6 +81,7 @@
80
81
  },
81
82
  "files": [
82
83
  "scripts",
84
+ "src",
83
85
  "dist",
84
86
  "CHANGELOG.md",
85
87
  "README.md",
package/server.json CHANGED
@@ -3,12 +3,12 @@
3
3
  "name": "io.github.appium/appium-mcp",
4
4
  "title": "MCP Appium - Mobile Development and Automation Server",
5
5
  "description": "MCP server for Appium mobile automation on iOS and Android devices with test creation tools.",
6
- "version": "1.8.14",
6
+ "version": "1.8.16",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "appium-mcp",
11
- "version": "1.8.14",
11
+ "version": "1.8.16",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  }
package/src/command.ts ADDED
@@ -0,0 +1,249 @@
1
+ import type { Client } from 'webdriver';
2
+ import {
3
+ isAndroidUiautomator2DriverSession,
4
+ isXCUITestDriverSession,
5
+ } from './session-store.js';
6
+ import type { DriverInstance } from './session-store.js';
7
+ import { StringRecord } from '@appium/types';
8
+
9
+ /**
10
+ * Execute a driver command.
11
+ *
12
+ * This abstracts differences between Appium driver implementations and
13
+ * the WebDriver `Client` interface. Drivers are narrowed using the
14
+ * type-guard helpers from `session-store`.
15
+ *
16
+ * @param driver - The driver instance to execute the command on.
17
+ * @param cmd - The command or script name.
18
+ * @param params - Parameters for the command.
19
+ * @returns The result of the executed command.
20
+ */
21
+ export async function execute(
22
+ driver: DriverInstance,
23
+ cmd: string,
24
+ params: any
25
+ ): Promise<any> {
26
+ if (isAndroidUiautomator2DriverSession(driver)) {
27
+ return await driver.execute(cmd, params);
28
+ } else if (isXCUITestDriverSession(driver)) {
29
+ return await driver.execute(cmd, params);
30
+ } else {
31
+ return await (driver as Client).executeScript(cmd, [params]);
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Activate an application by its bundle/package id on the device.
37
+ *
38
+ * Works across Android and iOS driver implementations as well as remote
39
+ * WebDriver clients where supported.
40
+ *
41
+ * @param driver - The driver instance to use.
42
+ * @param appId - Application identifier to activate.
43
+ */
44
+ export async function activateApp(
45
+ driver: DriverInstance,
46
+ appId: string
47
+ ): Promise<void> {
48
+ if (isAndroidUiautomator2DriverSession(driver)) {
49
+ await driver.activateApp(appId);
50
+ } else if (isXCUITestDriverSession(driver)) {
51
+ await driver.activateApp(appId);
52
+ } else {
53
+ await (driver as Client).activateApp(appId);
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Retrieve the current context (for hybrid apps, e.g. NATIVE_APP or a webview).
59
+ *
60
+ * @param driver - The driver instance to query.
61
+ * @returns The name of the current context.
62
+ */
63
+ export async function getCurrentContext(
64
+ driver: DriverInstance
65
+ ): Promise<string> {
66
+ if (isAndroidUiautomator2DriverSession(driver)) {
67
+ return await driver.getCurrentContext();
68
+ } else if (isXCUITestDriverSession(driver)) {
69
+ return await driver.getCurrentContext();
70
+ }
71
+ throw new Error('getCurrentContext is not supported');
72
+ }
73
+
74
+ /**
75
+ * List available contexts for the current session (native and webview contexts).
76
+ *
77
+ * @param driver - The driver instance to query.
78
+ * @returns Array of context names.
79
+ */
80
+ export async function getContexts(driver: DriverInstance): Promise<string[]> {
81
+ if (isAndroidUiautomator2DriverSession(driver)) {
82
+ return await driver.getContexts();
83
+ } else if (isXCUITestDriverSession(driver)) {
84
+ return (await driver.getContexts()) as string[];
85
+ }
86
+ throw new Error('getContexts is not supported');
87
+ }
88
+
89
+ /**
90
+ * Switch the driver's context to the supplied context name.
91
+ *
92
+ * @param driver - The driver instance to operate on.
93
+ * @param name - The context name to switch to (if omitted, behavior depends on driver).
94
+ */
95
+ export async function setContext(
96
+ driver: DriverInstance,
97
+ name?: string
98
+ ): Promise<void> {
99
+ if (isAndroidUiautomator2DriverSession(driver)) {
100
+ await driver.setContext(name);
101
+ } else if (isXCUITestDriverSession(driver)) {
102
+ await driver.setContext(name || null);
103
+ }
104
+ throw new Error('setContext is not supported');
105
+ }
106
+
107
+ /**
108
+ * Set the value of an element.
109
+ *
110
+ * @param driver - The driver instance to use.
111
+ * @param elementUUID - Element identifier.
112
+ * @param text - Text to set into the element.
113
+ * @returns Driver-specific result (often void or element value).
114
+ */
115
+ export async function setValue(
116
+ driver: DriverInstance,
117
+ elementUUID: string,
118
+ text: string
119
+ ) {
120
+ if (isAndroidUiautomator2DriverSession(driver)) {
121
+ return await driver.setValue(text, elementUUID);
122
+ } else if (isXCUITestDriverSession(driver)) {
123
+ return await driver.setValue(text, elementUUID);
124
+ }
125
+ return await (driver as Client).elementSendKeys(elementUUID, text);
126
+ }
127
+
128
+ /**
129
+ * Click an element identified by UUID.
130
+ *
131
+ * @param driver - The driver instance to use.
132
+ * @param elementUUID - Identifier of the element to click.
133
+ */
134
+ export async function elementClick(
135
+ driver: DriverInstance,
136
+ elementUUID: string
137
+ ): Promise<void> {
138
+ if (isAndroidUiautomator2DriverSession(driver)) {
139
+ return await driver.click(elementUUID);
140
+ } else if (isXCUITestDriverSession(driver)) {
141
+ return await driver.click(elementUUID);
142
+ }
143
+ return await driver.elementClick(elementUUID);
144
+ }
145
+
146
+ /**
147
+ * Get the bounding rectangle for an element.
148
+ *
149
+ * @param driver - The driver instance to query.
150
+ * @param elementUUID - Element identifier.
151
+ * @returns A `Rect` describing the element bounds.
152
+ */
153
+ export async function getElementRect(
154
+ driver: DriverInstance,
155
+ elementUUID: string
156
+ ): Promise<import('@appium/types').Rect> {
157
+ if (isAndroidUiautomator2DriverSession(driver)) {
158
+ return await driver.getElementRect(elementUUID);
159
+ } else if (isXCUITestDriverSession(driver)) {
160
+ return await driver.getElementRect(elementUUID);
161
+ }
162
+ return await driver.getElementRect(elementUUID);
163
+ }
164
+
165
+ /**
166
+ * Get the window rectangle for the current session.
167
+ *
168
+ * @param driver - The driver instance to query.
169
+ * @returns A `Rect` describing the window bounds.
170
+ */
171
+ export async function getWindowRect(
172
+ driver: DriverInstance
173
+ ): Promise<import('@appium/types').Rect> {
174
+ if (isAndroidUiautomator2DriverSession(driver)) {
175
+ return await driver.getWindowRect();
176
+ } else if (isXCUITestDriverSession(driver)) {
177
+ return await driver.getWindowRect();
178
+ }
179
+ return await driver.getWindowRect();
180
+ }
181
+
182
+ /**
183
+ * Perform low-level input actions (W3C Actions API) on the device.
184
+ *
185
+ * @param driver - The driver instance to use.
186
+ * @param operation - Actions or action sequences to perform.
187
+ */
188
+ export async function performActions(
189
+ driver: DriverInstance,
190
+ operation: StringRecord<any>[] | import('@appium/types').ActionSequence[]
191
+ ): Promise<void> {
192
+ if (isAndroidUiautomator2DriverSession(driver)) {
193
+ return await driver.performActions(operation);
194
+ } else if (isXCUITestDriverSession(driver)) {
195
+ return await driver.performActions(
196
+ operation as import('@appium/types').ActionSequence[]
197
+ );
198
+ }
199
+ return await driver.performActions(operation);
200
+ }
201
+
202
+ /**
203
+ * Retrieve the current page/source (often XML for native screens).
204
+ *
205
+ * @param driver - The driver instance to query.
206
+ * @returns Page source as a string.
207
+ */
208
+ export async function getPageSource(driver: DriverInstance): Promise<string> {
209
+ if (isAndroidUiautomator2DriverSession(driver)) {
210
+ return await driver.getPageSource();
211
+ } else if (isXCUITestDriverSession(driver)) {
212
+ return await driver.getPageSource();
213
+ }
214
+ return await driver.getPageSource();
215
+ }
216
+
217
+ /**
218
+ * Capture a screenshot from the device/session.
219
+ *
220
+ * @param driver - The driver instance to capture from.
221
+ * @returns Base64-encoded PNG string.
222
+ */
223
+ export async function getScreenshot(driver: DriverInstance): Promise<string> {
224
+ if (isAndroidUiautomator2DriverSession(driver)) {
225
+ return await driver.getScreenshot();
226
+ } else if (isXCUITestDriverSession(driver)) {
227
+ return await driver.getScreenshot();
228
+ }
229
+ return await driver.takeScreenshot();
230
+ }
231
+
232
+ /**
233
+ * Get the visible text from an element.
234
+ *
235
+ * @param driver - The driver instance to query.
236
+ * @param elementUUID - Identifier of the element.
237
+ * @returns The element's text content.
238
+ */
239
+ export async function getElementText(
240
+ driver: DriverInstance,
241
+ elementUUID: string
242
+ ): Promise<string> {
243
+ if (isAndroidUiautomator2DriverSession(driver)) {
244
+ return await driver.getText(elementUUID);
245
+ } else if (isXCUITestDriverSession(driver)) {
246
+ return await driver.getText(elementUUID);
247
+ }
248
+ return await driver.getElementText(elementUUID);
249
+ }
@@ -0,0 +1,164 @@
1
+ import { ADB } from 'appium-adb';
2
+ import log from '../logger.js';
3
+ /**
4
+ * Singleton ADB Manager to prevent multiple ADB instances
5
+ * This ensures only one ADB instance per host machine
6
+ */
7
+ export class ADBManager {
8
+ private static instance: ADBManager;
9
+ private adbInstance: ADB | null = null;
10
+ private isInitialized = false;
11
+ private initializationPromise: Promise<ADB> | null = null;
12
+
13
+ private constructor() {}
14
+
15
+ /**
16
+ * Get the singleton instance of ADBManager
17
+ */
18
+ public static getInstance(): ADBManager {
19
+ if (!ADBManager.instance) {
20
+ ADBManager.instance = new ADBManager();
21
+ }
22
+ return ADBManager.instance;
23
+ }
24
+
25
+ /**
26
+ * Initialize ADB instance with configuration
27
+ * @param options ADB configuration options
28
+ * @returns Promise<ADB> The initialized ADB instance
29
+ */
30
+ public async initialize(
31
+ options: { adbExecTimeout?: number; udid?: string } = {}
32
+ ): Promise<ADB> {
33
+ // If already initialized, return existing instance
34
+ if (this.isInitialized && this.adbInstance) {
35
+ log.debug(
36
+ 'ADB instance already initialized, returning existing instance'
37
+ );
38
+ return this.adbInstance;
39
+ }
40
+
41
+ // If initialization is in progress, wait for it
42
+ if (this.initializationPromise) {
43
+ log.debug('ADB initialization in progress, waiting for completion');
44
+ return await this.initializationPromise;
45
+ }
46
+
47
+ // Start initialization
48
+ this.initializationPromise = this._createADBInstance(options);
49
+
50
+ try {
51
+ this.adbInstance = await this.initializationPromise;
52
+ this.isInitialized = true;
53
+ log.info('ADB instance initialized successfully');
54
+ return this.adbInstance;
55
+ } catch (error) {
56
+ log.error(`Failed to initialize ADB instance: ${error}`);
57
+ this.initializationPromise = null;
58
+ throw error;
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Get the current ADB instance
64
+ * @returns ADB instance or null if not initialized
65
+ */
66
+ public getADBInstance(): ADB | null {
67
+ return this.adbInstance;
68
+ }
69
+
70
+ /**
71
+ * Check if ADB is initialized
72
+ * @returns boolean indicating initialization status
73
+ */
74
+ public isADBInitialized(): boolean {
75
+ return this.isInitialized && this.adbInstance !== null;
76
+ }
77
+
78
+ /**
79
+ * Reset the ADB instance (for testing or cleanup)
80
+ */
81
+ public async reset(): Promise<void> {
82
+ if (this.adbInstance) {
83
+ try {
84
+ // Cleanup any existing ADB instance
85
+ log.info('Resetting ADB instance');
86
+ this.adbInstance = null;
87
+ this.isInitialized = false;
88
+ this.initializationPromise = null;
89
+ } catch (error) {
90
+ log.error(`Error resetting ADB instance: ${error}`);
91
+ }
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Create ADB instance with proper error handling
97
+ * @param options ADB configuration options
98
+ * @returns Promise<ADB> The created ADB instance
99
+ */
100
+ private async _createADBInstance(
101
+ options: { adbExecTimeout?: number; udid?: string } = {}
102
+ ): Promise<ADB> {
103
+ const defaultOptions = {
104
+ adbExecTimeout: 60000,
105
+ ...options,
106
+ };
107
+
108
+ log.info(
109
+ `Creating ADB instance with options: ${JSON.stringify(defaultOptions)}`
110
+ );
111
+
112
+ try {
113
+ const adb = await ADB.createADB(defaultOptions);
114
+ log.info('ADB instance created successfully');
115
+ return adb;
116
+ } catch (error) {
117
+ log.error(`Failed to create ADB instance: ${error}`);
118
+ throw new Error(`ADB initialization failed: ${error}`);
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Get ADB instance for specific device operations
124
+ * This method ensures we reuse the singleton instance
125
+ * @param udid Optional device UDID for device-specific operations
126
+ * @returns Promise<ADB> The ADB instance
127
+ */
128
+ public async getADBForDevice(udid?: string): Promise<ADB> {
129
+ if (!this.isADBInitialized()) {
130
+ await this.initialize({ udid });
131
+ }
132
+
133
+ if (!this.adbInstance) {
134
+ throw new Error('ADB instance not available');
135
+ }
136
+
137
+ return this.adbInstance;
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Global ADB Manager instance
143
+ * Use this throughout the application to access ADB functionality
144
+ */
145
+ export const adbManager = ADBManager.getInstance();
146
+
147
+ /**
148
+ * Convenience function to get ADB instance
149
+ * @param options ADB configuration options
150
+ * @returns Promise<ADB> The ADB instance
151
+ */
152
+ export async function getADBInstance(
153
+ options: { adbExecTimeout?: number; udid?: string } = {}
154
+ ): Promise<ADB> {
155
+ return await adbManager.getADBForDevice(options.udid);
156
+ }
157
+
158
+ /**
159
+ * Convenience function to get existing ADB instance (without initialization)
160
+ * @returns ADB instance or null if not initialized
161
+ */
162
+ export function getExistingADBInstance(): ADB | null {
163
+ return adbManager.getADBInstance();
164
+ }
@@ -0,0 +1,145 @@
1
+ import { Simctl } from 'node-simctl';
2
+ import { utilities } from 'appium-ios-device';
3
+ import log from '../logger.js';
4
+
5
+ export interface IOSDevice {
6
+ name: string;
7
+ udid: string;
8
+ state?: string;
9
+ type: 'simulator' | 'real';
10
+ platform?: string;
11
+ }
12
+
13
+ /**
14
+ * iOS Device Manager to list and manage iOS devices and simulators
15
+ */
16
+ export class IOSManager {
17
+ private static instance: IOSManager;
18
+ private simctl: Simctl;
19
+
20
+ private constructor() {
21
+ this.simctl = new Simctl();
22
+ }
23
+
24
+ /**
25
+ * Get the singleton instance of IOSManager
26
+ */
27
+ public static getInstance(): IOSManager {
28
+ if (!IOSManager.instance) {
29
+ IOSManager.instance = new IOSManager();
30
+ }
31
+ return IOSManager.instance;
32
+ }
33
+
34
+ /**
35
+ * Check if running on macOS (required for iOS development)
36
+ */
37
+ public isMac(): boolean {
38
+ return process.platform === 'darwin';
39
+ }
40
+
41
+ /**
42
+ * List all iOS simulators
43
+ * @returns Array of iOS simulators
44
+ */
45
+ public async listSimulators(): Promise<IOSDevice[]> {
46
+ if (!this.isMac()) {
47
+ log.warn('iOS simulators are only available on macOS');
48
+ return [];
49
+ }
50
+
51
+ try {
52
+ const devices = await this.simctl.getDevices();
53
+ const simulators: IOSDevice[] = [];
54
+
55
+ // devices is an object with runtime as key (e.g., "18.2") and array of devices as value
56
+ // node-simctl returns simplified runtime keys that are already iOS versions
57
+ for (const [runtime, deviceList] of Object.entries(devices)) {
58
+ if (Array.isArray(deviceList)) {
59
+ for (const device of deviceList) {
60
+ simulators.push({
61
+ name: device.name,
62
+ udid: device.udid,
63
+ state: device.state,
64
+ type: 'simulator',
65
+ platform: runtime, // Runtime is already the iOS version (e.g., "18.2")
66
+ });
67
+ }
68
+ }
69
+ }
70
+
71
+ return simulators;
72
+ } catch (error) {
73
+ log.error(`Error listing iOS simulators: ${error}`);
74
+ return [];
75
+ }
76
+ }
77
+
78
+ /**
79
+ * List only booted (running) iOS simulators
80
+ * @returns Array of booted simulators
81
+ */
82
+ public async listBootedSimulators(): Promise<IOSDevice[]> {
83
+ const allSimulators = await this.listSimulators();
84
+ return allSimulators.filter((simulator) => simulator.state === 'Booted');
85
+ }
86
+
87
+ /**
88
+ * List all connected real iOS devices
89
+ * @returns Array of real iOS devices
90
+ */
91
+ public async listRealDevices(): Promise<IOSDevice[]> {
92
+ if (!this.isMac()) {
93
+ log.warn('iOS real devices are only available on macOS');
94
+ return [];
95
+ }
96
+
97
+ try {
98
+ const devices = await utilities.getConnectedDevices();
99
+ return devices.map((udid: string) => ({
100
+ name: udid, // We'll use UDID as name for now
101
+ udid,
102
+ type: 'real' as const,
103
+ }));
104
+ } catch (error) {
105
+ log.error(`Error listing iOS real devices: ${error}`);
106
+ return [];
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Get all available iOS simulators
112
+ * @returns Array of all iOS simulators (both booted and shutdown)
113
+ */
114
+ public async getAvailableSimulators(): Promise<IOSDevice[]> {
115
+ return await this.listSimulators();
116
+ }
117
+
118
+ /**
119
+ * Get all available real devices
120
+ * @returns Array of real iOS devices
121
+ */
122
+ public async getAvailableRealDevices(): Promise<IOSDevice[]> {
123
+ return await this.listRealDevices();
124
+ }
125
+
126
+ /**
127
+ * Get devices based on device type
128
+ * @param deviceType 'simulator' or 'real'
129
+ * @returns Array of iOS devices
130
+ */
131
+ public async getDevicesByType(
132
+ deviceType: 'simulator' | 'real'
133
+ ): Promise<IOSDevice[]> {
134
+ if (deviceType === 'simulator') {
135
+ return await this.getAvailableSimulators();
136
+ } else {
137
+ return await this.getAvailableRealDevices();
138
+ }
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Global iOS Manager instance
144
+ */
145
+ export const iosManager = IOSManager.getInstance();
package/src/index.ts ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+
3
+ import server from './server.js';
4
+ import log from './logger.js';
5
+
6
+ // Parse command line arguments
7
+ const args = process.argv.slice(2);
8
+ const useHttpStream = args.includes('--httpStream');
9
+ const port =
10
+ args.find((arg) => arg.startsWith('--port='))?.split('=')[1] || '8080';
11
+
12
+ async function startServer(): Promise<void> {
13
+ log.info('Starting MCP Appium MCP Server...');
14
+
15
+ try {
16
+ if (useHttpStream) {
17
+ server.start({
18
+ transportType: 'httpStream',
19
+ httpStream: {
20
+ endpoint: '/sse',
21
+ port: parseInt(port, 10),
22
+ },
23
+ });
24
+
25
+ log.info(
26
+ `Server started with httpStream transport on http://localhost:${port}/sse`
27
+ );
28
+ log.info('Waiting for client connections...');
29
+ } else {
30
+ // Start with stdio transport
31
+ server.start({
32
+ transportType: 'stdio',
33
+ });
34
+
35
+ log.info('Server started with stdio transport');
36
+ log.info('Waiting for client connections...');
37
+ }
38
+ } catch (error: any) {
39
+ log.error('Error starting server:', error);
40
+ process.exit(1);
41
+ }
42
+ }
43
+
44
+ // Start the server
45
+ startServer();