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.
- package/CHANGELOG.md +12 -0
- package/package.json +3 -1
- package/server.json +2 -2
- package/src/command.ts +249 -0
- package/src/devicemanager/adb-manager.ts +164 -0
- package/src/devicemanager/ios-manager.ts +145 -0
- package/src/index.ts +45 -0
- package/src/locators/element-filter.ts +136 -0
- package/src/locators/generate-all-locators.ts +150 -0
- package/src/locators/locator-generation.ts +657 -0
- package/src/locators/source-parsing.ts +149 -0
- package/src/logger.ts +11 -0
- package/src/resources/caps.json +697 -0
- package/src/resources/index.ts +8 -0
- package/src/resources/java/template.ts +83 -0
- package/src/resources/submodules/appium/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- package/src/resources/submodules/appium/CHANGELOG.md +45 -0
- package/src/resources/submodules/appium/CONDUCT.md +48 -0
- package/src/resources/submodules/appium/GOVERNANCE.md +185 -0
- package/src/resources/submodules/appium/IDEAS.md +16 -0
- package/src/resources/submodules/appium/README.md +221 -0
- package/src/resources/submodules/appium/ROADMAP.md +30 -0
- package/src/resources/submodules/appium/SPONSORS.md +3 -0
- package/src/resources/submodules/appium/docs/README.md +6 -0
- package/src/resources/submodules/appium/docs/payout.md +35 -0
- package/src/resources/submodules/appium/packages/appium/CHANGELOG.md +1437 -0
- package/src/resources/submodules/appium/packages/appium/README.md +221 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/index.md +2 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-appiumconf2024.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-headspin-as-development-partner.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-strategic-partner.md +42 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sponsorship-program.md +48 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/appium3.md +40 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/hello-world.md +15 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/contributing/index.md +150 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-docs.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-doctor-checks.md +141 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-drivers.md +860 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-plugins.md +514 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/config-system.md +451 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/index.md +18 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/sensitive.md +49 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/clients.md +132 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/drivers.md +207 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/index.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/plugins.md +138 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/tools.md +83 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/branch-testing.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/caching.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/caps.md +275 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/config.md +98 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/context.md +44 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/event-timing.md +73 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/execute-methods.md +122 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/grid.md +166 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/headers.md +17 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/log-filters.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/managing-exts.md +87 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-1-to-2.md +368 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-2-to-3.md +464 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/security.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/settings.md +68 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/tls.md +42 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/index.md +59 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/appium.md +202 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/clients.md +127 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/drivers.md +188 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/history.md +196 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/index.md +39 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/index.md +29 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/install.md +50 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/next-steps.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/requirements.md +29 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-dotnet.md +105 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-java.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-js.md +75 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-py.md +60 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-rb.md +83 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/uiauto2-driver.md +144 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/appium.md +394 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/bidi.md +70 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/index.md +30 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/jsonwp.md +214 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/mjsonwp.md +151 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/others.md +671 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/plugins.md +289 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/webdriver.md +1114 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/env-vars.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/extensions.md +239 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/index.md +35 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/server.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/setup.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/index.md +25 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/resources/index.md +28 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/sponsors/index.md +64 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/index.md +2 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-appiumconf2024.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-headspin-as-development-partner.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sponsorship-program.md +48 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/appium3.md +40 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/hello-world.md +15 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/contributing/index.md +158 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-docs.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-doctor-checks.md +141 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-drivers.md +866 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-plugins.md +520 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/config-system.md +468 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/index.md +18 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/sensitive.md +49 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/clients.md +143 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/drivers.md +219 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/index.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/plugins.md +140 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/tools.md +87 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/branch-testing.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caching.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caps.md +259 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/config.md +102 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/context.md +44 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/event-timing.md +75 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/execute-methods.md +142 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/grid.md +166 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/headers.md +17 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/log-filters.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/managing-exts.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-1-to-2.md +402 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-2-to-3.md +458 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/security.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/settings.md +70 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/tls.md +43 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/index.md +55 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/appium.md +191 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/clients.md +139 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/drivers.md +188 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/history.md +196 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/index.md +39 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/index.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/install.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/next-steps.md +19 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/requirements.md +29 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-dotnet.md +107 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-java.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-js.md +77 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-py.md +63 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-rb.md +85 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/uiauto2-driver.md +148 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/appium.md +395 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/bidi.md +71 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/index.md +30 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/jsonwp.md +215 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/mjsonwp.md +152 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/others.md +672 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/plugins.md +291 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/webdriver.md +1114 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/env-vars.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/extensions.md +240 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/index.md +35 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/server.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/setup.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/index.md +25 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/resources/index.md +28 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/sponsors/index.md +61 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz-white.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-white.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-light.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-sauce.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/index.md +2 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-appiumconf2024.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-headspin-as-development-partner.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sponsorship-program.md +48 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/appium3.md +40 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/hello-world.md +15 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/contributing/index.md +132 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-docs.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-doctor-checks.md +141 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-drivers.md +866 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-plugins.md +520 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/config-system.md +468 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/index.md +18 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/sensitive.md +49 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/clients.md +143 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/drivers.md +219 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/index.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/plugins.md +140 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/tools.md +87 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/branch-testing.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caching.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caps.md +284 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/config.md +102 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/context.md +44 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/event-timing.md +75 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/execute-methods.md +142 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/grid.md +166 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/headers.md +17 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/log-filters.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/managing-exts.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-1-to-2.md +410 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-2-to-3.md +459 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/security.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/settings.md +70 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/tls.md +43 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/index.md +54 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/appium.md +200 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/clients.md +139 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/drivers.md +188 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/history.md +196 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/index.md +39 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/index.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/install.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/next-steps.md +19 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/requirements.md +21 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-dotnet.md +99 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-java.md +20 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-js.md +62 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-py.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-rb.md +80 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/uiauto2-driver.md +148 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/appium.md +395 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/bidi.md +71 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/index.md +30 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/jsonwp.md +215 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/mjsonwp.md +152 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/others.md +672 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/plugins.md +291 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/webdriver.md +1114 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/env-vars.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/extensions.md +240 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/index.md +35 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/server.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/setup.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/index.md +25 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/resources/index.md +28 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/sponsors/index.md +61 -0
- package/src/resources/submodules/appium/packages/appium/types/manifest/README.md +30 -0
- package/src/resources/submodules/appium/packages/base-driver/CHANGELOG.md +1131 -0
- package/src/resources/submodules/appium/packages/base-driver/README.md +15 -0
- package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/errors.md +82 -0
- package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/protocol-methods.md +182 -0
- package/src/resources/submodules/appium/packages/base-driver/static/appium.png +0 -0
- package/src/resources/submodules/appium/packages/base-plugin/CHANGELOG.md +672 -0
- package/src/resources/submodules/appium/packages/base-plugin/README.md +15 -0
- package/src/resources/submodules/appium/packages/docutils/CHANGELOG.md +948 -0
- package/src/resources/submodules/appium/packages/docutils/README.md +27 -0
- package/src/resources/submodules/appium/packages/driver-test-support/CHANGELOG.md +717 -0
- package/src/resources/submodules/appium/packages/driver-test-support/README.md +112 -0
- package/src/resources/submodules/appium/packages/eslint-config-appium-ts/CHANGELOG.md +168 -0
- package/src/resources/submodules/appium/packages/eslint-config-appium-ts/README.md +33 -0
- package/src/resources/submodules/appium/packages/execute-driver-plugin/CHANGELOG.md +603 -0
- package/src/resources/submodules/appium/packages/execute-driver-plugin/README.md +42 -0
- package/src/resources/submodules/appium/packages/fake-driver/CHANGELOG.md +545 -0
- package/src/resources/submodules/appium/packages/fake-driver/README.md +7 -0
- package/src/resources/submodules/appium/packages/fake-driver/lib/screen.png +0 -0
- package/src/resources/submodules/appium/packages/fake-plugin/CHANGELOG.md +683 -0
- package/src/resources/submodules/appium/packages/fake-plugin/README.md +7 -0
- package/src/resources/submodules/appium/packages/images-plugin/CHANGELOG.md +602 -0
- package/src/resources/submodules/appium/packages/images-plugin/README.md +27 -0
- package/src/resources/submodules/appium/packages/images-plugin/docs/find-by-image.md +65 -0
- package/src/resources/submodules/appium/packages/images-plugin/docs/image-comparison.md +203 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/appstore.png +0 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img1.png +0 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2.png +0 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2_part.png +0 -0
- package/src/resources/submodules/appium/packages/logger/CHANGELOG.md +162 -0
- package/src/resources/submodules/appium/packages/logger/README.md +31 -0
- package/src/resources/submodules/appium/packages/opencv/CHANGELOG.md +384 -0
- package/src/resources/submodules/appium/packages/opencv/README.md +68 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/appium-diagram.jpg +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc1.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc2.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc_rotated.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/findwaldo.jpg +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/number5.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/waldo.jpg +0 -0
- package/src/resources/submodules/appium/packages/plugin-test-support/CHANGELOG.md +539 -0
- package/src/resources/submodules/appium/packages/plugin-test-support/README.md +49 -0
- package/src/resources/submodules/appium/packages/relaxed-caps-plugin/CHANGELOG.md +154 -0
- package/src/resources/submodules/appium/packages/relaxed-caps-plugin/README.md +35 -0
- package/src/resources/submodules/appium/packages/schema/CHANGELOG.md +271 -0
- package/src/resources/submodules/appium/packages/schema/README.md +50 -0
- package/src/resources/submodules/appium/packages/storage-plugin/CHANGELOG.md +73 -0
- package/src/resources/submodules/appium/packages/storage-plugin/README.md +83 -0
- package/src/resources/submodules/appium/packages/strongbox/CHANGELOG.md +94 -0
- package/src/resources/submodules/appium/packages/strongbox/README.md +96 -0
- package/src/resources/submodules/appium/packages/support/CHANGELOG.md +1054 -0
- package/src/resources/submodules/appium/packages/support/README.md +161 -0
- package/src/resources/submodules/appium/packages/test-support/CHANGELOG.md +712 -0
- package/src/resources/submodules/appium/packages/test-support/README.md +61 -0
- package/src/resources/submodules/appium/packages/tsconfig/CHANGELOG.md +131 -0
- package/src/resources/submodules/appium/packages/tsconfig/README.md +19 -0
- package/src/resources/submodules/appium/packages/types/CHANGELOG.md +793 -0
- package/src/resources/submodules/appium/packages/types/README.md +21 -0
- package/src/resources/submodules/appium/packages/universal-xml-plugin/CHANGELOG.md +435 -0
- package/src/resources/submodules/appium/packages/universal-xml-plugin/README.md +53 -0
- package/src/resources/submodules/appium/renovate/README.md +63 -0
- package/src/resources/submodules/appium-uiautomator2-driver/CHANGELOG.md +1204 -0
- package/src/resources/submodules/appium-uiautomator2-driver/README.md +2077 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/actions.md +72 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/activity-startup.md +47 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/android-appbundle.md +69 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/android-mobile-gestures.md +352 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/bidi.md +50 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/capability-sets.md +136 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/scheduled-actions.md +155 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/uiautomator-uiselector.md +51 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/main.md +95 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen1.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen2.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/checkered-squares.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/start-button.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/stop-button.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/.github/ISSUE_TEMPLATE.md +4 -0
- package/src/resources/submodules/appium-xcuitest-driver/CHANGELOG.md +2594 -0
- package/src/resources/submodules/appium-xcuitest-driver/README.md +55 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo-white.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-plus-xctest.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/contributing.md +45 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints-wda.md +61 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints.md +98 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/keynote.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/on_my_iphone.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/top_files.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/attach-to-running-wda.md +43 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/audio-capture.md +78 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/capability-sets.md +169 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/ci-setup.md +47 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/clipboard.md +47 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/elements-lookup-troubleshooting.md +158 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/file-transfer.md +147 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/gestures.md +52 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/hybrid.md +137 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/input-events.md +67 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/install-certificate.md +19 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/multiple-xcode-versions.md +37 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/parallel-tests.md +39 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-prebuilt-wda.md +135 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-preinstalled-wda.md +178 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/touch-id.md +33 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/troubleshooting.md +191 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/tvos.md +114 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-custom-server.md +283 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-slowness.md +231 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/index.md +36 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/installation/index.md +137 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/overview.md +19 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/check-prov-prof.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-new-project.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-single-page.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/no-prov-prof.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/project-prov-prof.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/set-up-bundle.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/untrusted-dev.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-bundle-id.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-config.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-fail.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-succeed.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/index.md +51 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-auto.md +49 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-manual.md +40 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-full-manual.md +50 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-generic-manual.md +49 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/real-device-config.md +100 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/assets/images/useXctestrunFile.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/bidi.md +75 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/capabilities.md +165 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/commands.md +490 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/element-attributes.md +27 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/execute-methods.md +2206 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/ios-predicate.md +196 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/locator-strategies.md +19 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/scripts.md +29 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/security-flags.md +22 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/server-args.md +16 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/settings.md +49 -0
- package/src/resources/submodules/appium-xcuitest-driver/test/assets/TestApp-iphonesimulator.app/Default-568h@2x.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/test/assets/test.png +0 -0
- package/src/schema.ts +5 -0
- package/src/scripts/simple-index-documentation.ts +93 -0
- package/src/scripts/simple-query-documentation.ts +61 -0
- package/src/server.ts +40 -0
- package/src/session-store.ts +151 -0
- package/src/tests/README.md +83 -0
- package/src/tests/__mocks__/@appium/support.ts +30 -0
- package/src/tests/generate-all-locators.test.ts +178 -0
- package/src/tests/screenshot.test.ts +279 -0
- package/src/tests/test-setup-wda.ts +255 -0
- package/src/tools/README.md +179 -0
- package/src/tools/app-management/activate-app.ts +47 -0
- package/src/tools/app-management/install-app.ts +46 -0
- package/src/tools/app-management/list-apps.ts +87 -0
- package/src/tools/app-management/terminate-app.ts +48 -0
- package/src/tools/app-management/uninstall-app.ts +48 -0
- package/src/tools/context/get-contexts.ts +87 -0
- package/src/tools/context/switch-context.ts +101 -0
- package/src/tools/documentation/answer-appium.ts +73 -0
- package/src/tools/documentation/index.ts +98 -0
- package/src/tools/documentation/reasoning-rag.ts +435 -0
- package/src/tools/documentation/sentence-transformers-embeddings.ts +144 -0
- package/src/tools/documentation/simple-pdf-indexer.ts +508 -0
- package/src/tools/documentation/uploads/documents.json +1 -0
- package/src/tools/index.ts +159 -0
- package/src/tools/interactions/click.ts +48 -0
- package/src/tools/interactions/double-tap.ts +96 -0
- package/src/tools/interactions/drag-and-drop.ts +236 -0
- package/src/tools/interactions/find.ts +58 -0
- package/src/tools/interactions/get-page-source.ts +65 -0
- package/src/tools/interactions/get-text.ts +48 -0
- package/src/tools/interactions/long-press.ts +111 -0
- package/src/tools/interactions/screenshot.ts +116 -0
- package/src/tools/interactions/set-value.ts +49 -0
- package/src/tools/ios/boot-simulator.ts +88 -0
- package/src/tools/ios/install-wda.ts +277 -0
- package/src/tools/ios/setup-wda.ts +217 -0
- package/src/tools/navigations/scroll-to-element.ts +198 -0
- package/src/tools/navigations/scroll.ts +101 -0
- package/src/tools/navigations/swipe.ts +364 -0
- package/src/tools/session/create-session.ts +379 -0
- package/src/tools/session/delete-session.ts +56 -0
- package/src/tools/session/select-device.ts +326 -0
- package/src/tools/session/select-platform.ts +250 -0
- package/src/tools/test-generation/generate-tests.ts +48 -0
- package/src/tools/test-generation/locators.ts +103 -0
- 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.
|
|
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.
|
|
6
|
+
"version": "1.8.16",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "npm",
|
|
10
10
|
"identifier": "appium-mcp",
|
|
11
|
-
"version": "1.8.
|
|
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();
|