The element story is the part worth having: get_visible_elements is called out as the thing to prefer over take_screenshot when you intend to interact, and get_accessibility returns roles, names and states rather than an image, which is what makes a selector survive a redesign. Part of the device surface is platform-bound — shake_device is iOS only, and send_keys, press_key_code and open_notifications are Android only — and the whole mobile half is inert without an Appium server behind it.
A WebDriverIO session under the client's control, with 42 tools spanning a desktop browser and a mobile app session started through Appium.
- A browser session started headless or at a set window size, navigated, scrolled by pixels, and closed or detached at the end
- Element work that does not go through pixels: the elements visible in the viewport, an accessibility snapshot carrying roles, names and states, and clicks by selector or by visible text
- Cookies read by name or in full, set with domain, path, expiry, httpOnly, secure and sameSite, and deleted one at a time or all at once
- A mobile app session over Appium, opened with platform, version, device name or udid and with reset, alert and permission behaviour decided at start
- Mobile gestures: tap by selector or coordinates, swipe by direction, distance and duration, long press, and drag and drop between selectors or points
- App and device state: apps activated or terminated by bundleId, native and webview contexts switched, orientation, lock state and keyboard visibility read, and geolocation set or read
No credentials. The browser tools need a browser on the machine. The mobile tools need a running Appium server — its host, port and path are parameters of start_app_session — plus a device or emulator you can name by platform, platformVersion, deviceName or udid, and the app's bundleId for the app-state tools.
One command — npx -y webdriverio-mcp
