3.12.0npm · @wdio/mcp · latest release
Observed 2026-09-04T08:14:48.416Z using mcpSecurity-inventory. Protocol 2025-06-18.
| Tool | Category | Risk |
|---|---|---|
attach_sessionAttaches to an existing remote WebDriver or Appium session by ID without creating a new session. Only one session can be active at a time. The externally managed session is detached, not terminated, by default on close.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"minLength": 1,
"description": "Existing remote WebDriver/Appium session ID"
},
"provider": {
"default": "local",
"description": "Provider hosting the existing session (default: local). Use \"external\" for a custom W3C WebDriver endpoint.",
"type": "string",
"enum": [
"local",
"browserstack",
"saucelabs",
"testmu",
"testingbot",
"digitalai",
"external"
]
},
"platform": {
"type": "string",
"enum": [
"browser",
"ios",
"android"
],
"description": "Existing session platform type (browser, ios, or android; Electron attachment is unsupported)."
},
"browser": {
"description": "Browser for local command registration (browser platform only, default: chrome)",
"type": "string",
"enum": [
"chrome",
"firefox",
"edge",
"safari"
]
},
"automationName": {
"description": "Appium automation driver for local command registration (mobile platforms only)",
"type": "string",
"enum": [
"XCUITest",
"UiAutomator2"
]
},
"webdriverConfig": {
"description": "Existing W3C WebDriver endpoint connection (provider: \"external\" only). Defaults to 127.0.0.1:4445/.",
"type": "object",
"properties": {
"protocol": {
"default": "http",
"type": "string"
},
"hostname": {
"default": "127.0.0.1",
"type": "string"
},
"port": {
"default": 4445,
"type": "number"
},
"path": {
"default": "/",
"type": "string"
}
}
},
"appiumConfig": {
"description": "Appium server connection (local provider only)",
"type": "object",
"properties": {
"host": {
"type": "string"
},
"port": {
"type": "number"
},
"path": {
"type": "string"
},
"protocol": {
"type": "string"
}
}
},
"region": {
"default": "eu-central-1",
"description": "Sauce Labs region (default: eu-central-1). Only used with provider: \"saucelabs\".",
"type": "string",
"enum": [
"us-west-1",
"eu-central-1",
"apac-southeast-1"
]
},
"trace": {
"description": "Enable trace recording for subsequent commands — produces a Playwright-compatible zip saved to .trace/ on close_session.",
"type": "boolean"
},
"capabilities": {
"description": "Capabilities used to register the correct browser or Appium command surface locally; they are not sent to the remote endpoint",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"sessionId",
"platform"
]
}Annotations{
"title": "Attach Session",
"destructiveHint": false
} | — | — |
click_elementWaits for an element, scrolls it into view, and fires element.click(). May trigger navigation, form submission, or modals. Browser sessions only — on iOS element.click() is silently ignored; use tap_element instead. Default timeout: 3000ms.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"selector": {
"type": "string",
"description": "Value for the selector, in the form of css selector or xpath (\"button.my-class\" or \"//button[@class='my-class']\" or \"button=Exact text with spaces\" or \"a*=Link containing text\")"
},
"scrollToView": {
"description": "Whether to scroll the element into view before clicking",
"type": "boolean"
},
"timeout": {
"description": "Maximum time to wait for element in milliseconds",
"type": "number"
}
},
"required": [
"selector"
]
}Annotations{
"title": "Click Element",
"destructiveHint": false
} | — | — |
close_sessionCloses the current session or detaches without terminating. Detach preserves app state on the Appium server — sessions with noReset: true auto-detach by default. Closing a browser attach session terminates chromedriver but the Chrome process spawned by launch_chrome remains running.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"detach": {
"description": "If true, disconnect without terminating; if false, terminate. When omitted, externally managed and auto-detach sessions are preserved while other sessions are terminated.",
"type": "boolean"
}
}
}Annotations{
"title": "Close Session",
"destructiveHint": true
} | — | — |
delete_cookiesDeletes all cookies or a single cookie by name from the current browser session. Irreversible — deleted cookies cannot be recovered.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"description": "Optional cookie name to delete a specific cookie. If not provided, deletes all cookies",
"type": "string"
}
}
}Annotations{
"title": "Delete Cookies",
"destructiveHint": true,
"idempotentHint": true
} | — | — |
drag_and_dropDrags an element to another element or to relative x/y offsets. x and y are offsets from the source element, not absolute screen coordinates (unlike tap_element). Provide targetSelector OR both x and y. Mobile-only.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"sourceSelector": {
"type": "string",
"description": "Source element selector to drag"
},
"targetSelector": {
"description": "Target element selector to drop onto",
"type": "string"
},
"x": {
"description": "Target X offset (if no targetSelector)",
"type": "number"
},
"y": {
"description": "Target Y offset (if no targetSelector)",
"type": "number"
},
"duration": {
"description": "Drag duration in milliseconds",
"type": "number",
"minimum": 100,
"maximum": 5000
}
},
"required": [
"sourceSelector"
]
}Annotations{
"title": "Drag and Drop",
"destructiveHint": false
} | — | — |
emulate_deviceEmulates a mobile or tablet device in the current browser session by setting viewport, DPR, user-agent, and touch events. Requires a BiDi-enabled session (start_session with capabilities: { webSocketUrl: true }). Omit device to list available presets. Pass "reset" to restore desktop defaults. Changes persist for all subsequent tool calls until reset or session close. Browser-only.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"device": {
"description": "Device preset name (e.g. \"iPhone 15\", \"Pixel 7\"). Omit to list available presets. Pass \"reset\" to restore desktop defaults.",
"type": "string"
}
}
}Annotations{
"title": "Emulate Device",
"destructiveHint": false,
"idempotentHint": true
} | — | — |
execute_electron_scriptExecutes arbitrary JavaScript in the Electron main process. This is privileged code execution with access to Electron APIs; use only with trusted scripts.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"script": {
"type": "string",
"minLength": 1,
"description": "JavaScript body executed in the Electron main process. Use `electron` for Electron APIs, `args` for supplied values, and `return` for a result."
},
"args": {
"description": "Values made available to the script as args[0], args[1], and so on.",
"type": "array",
"items": {}
}
},
"required": [
"script"
]
}Annotations{
"title": "Execute Electron Main-Process Script",
"destructiveHint": true
} | — | — |
execute_scriptExecutes arbitrary JavaScript in browser page context or Appium mobile: commands. Can read/modify DOM, trigger events, terminate apps, or run Android shell commands — use only when no dedicated tool covers the action. Browser: pass JS in script, use 'return' for values, string args matching selectors auto-resolve to elements. Mobile: use 'mobile: <command>' syntax in script with args array (e.g. "mobile: pressKey", "mobile: activateApp"). Prefer click_element/set_value/get_elements for standard interactions.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"script": {
"type": "string",
"description": "JavaScript code (browser) or mobile command string like \"mobile: pressKey\" (Appium)"
},
"args": {
"description": "Arguments to pass to the script. For browser: element selectors or values. For mobile commands: command-specific parameters as objects.",
"type": "array",
"items": {}
}
},
"required": [
"script"
]
}Annotations{
"title": "Execute Script",
"destructiveHint": false
} | — | — |
get_accessibility_treeReturns the page accessibility tree with roles, names, and selectors. Browser-only. Supports filtering by ARIA roles and pagination via limit/offset.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"limit": {
"default": 0,
"description": "Maximum number of nodes to return (0 = no limit)",
"type": "number"
},
"offset": {
"default": 0,
"description": "Number of nodes to skip for pagination",
"type": "number"
},
"roles": {
"description": "Filter by ARIA roles, e.g. [\"button\", \"link\", \"heading\"]",
"type": "array",
"items": {
"type": "string"
}
}
}
}Annotations{
"title": "Get Accessibility Tree",
"readOnlyHint": true,
"idempotentHint": true
} | — | — |
get_app_stateReturns the current state of a mobile app: not installed, not running, background, or foreground. Mobile-only.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"bundleId": {
"type": "string",
"description": "App bundle ID (iOS) or package name (Android), e.g. \"com.example.app\""
}
},
"required": [
"bundleId"
]
}Annotations{
"title": "Get App State",
"readOnlyHint": true,
"idempotentHint": true
} | — | — |
get_contextsReturns available automation contexts and the currently active one. Use before switch_context to discover NATIVE_APP and WEBVIEW_* targets. Mobile-only.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {}
}Annotations{
"title": "Get Automation Contexts",
"readOnlyHint": true,
"idempotentHint": true
} | — | — |
get_cookiesReturns all cookies for the current session, or a single cookie by name. Use to verify auth state, session tokens, or feature flags after login flows.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"description": "Cookie name to retrieve a specific cookie. If omitted, returns all cookies.",
"type": "string"
}
}
}Annotations{
"title": "Get Cookies",
"readOnlyHint": true,
"idempotentHint": true
} | — | — |
get_elementsReturns interactable elements on the current page with selectors, text, and bounding boxes. Supports filtering by element type, viewport visibility, and pagination. Use when the wdio://session/current/elements resource does not return desired elements.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"inViewportOnly": {
"description": "Only return elements visible in the current viewport (default: false).",
"type": "boolean"
},
"includeContainers": {
"description": "Include container elements like divs and sections (default: false)",
"type": "boolean"
},
"includeBounds": {
"description": "Include element bounding box coordinates (default: false)",
"type": "boolean"
},
"limit": {
"default": 0,
"description": "Maximum number of elements to return (0 = no limit)",
"type": "number"
},
"offset": {
"default": 0,
"description": "Number of elements to skip (for pagination)",
"type": "number"
}
}
}Annotations{
"title": "Get Visible Elements",
"readOnlyHint": true,
"idempotentHint": true
} | — | — |
get_screenshotTakes a screenshot of the current page or screen and returns a base64-encoded image, resized and compressed for model context limits.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {}
}Annotations{
"title": "Get Screenshot",
"readOnlyHint": true,
"idempotentHint": true
} | — | — |
get_tabsLists all browser tabs with handle, title, URL, and which is active. Use before switch_tab to find the target handle or index. Browser-only.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {}
}Annotations{
"title": "Get Browser Tabs",
"readOnlyHint": true,
"idempotentHint": true
} | — | — |
hide_keyboardDismisses the on-screen keyboard on mobile. Call after text entry when the keyboard obscures elements. No-op if already hidden. Mobile-only.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {}
}Annotations{
"title": "Hide Keyboard",
"destructiveHint": false,
"idempotentHint": true
} | — | — |
launch_chromeLaunches Chrome with remote debugging enabled. Wipes and recreates a temporary profile directory on each call. Mode "newInstance" (default) runs alongside existing Chrome; "freshSession" starts with an empty profile. Set copyProfileFiles to copy cookies/logins from your Default profile — changes do not sync back. After launch, call start_session with attach: true to connect. Spawns a detached Chrome process that persists if the server exits.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"port": {
"default": 9222,
"description": "Remote debugging port (default: 9222)",
"type": "number"
},
"mode": {
"default": "newInstance",
"description": "newInstance: open alongside existing Chrome | freshSession: clean profile",
"type": "string",
"enum": [
"newInstance",
"freshSession"
]
},
"copyProfileFiles": {
"description": "Copy your Default Chrome profile (cookies, logins) into the debug session.",
"type": "boolean"
}
}
}Annotations{
"title": "Launch Chrome",
"destructiveHint": false
} | — | — |
list_appsList apps uploaded to a cloud provider (BrowserStack App Automate, Sauce Labs App Storage, TestMu Real Device Cloud, TestingBot Storage, or Digital.ai Applications). Reads provider-specific credentials from environment.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"browserstack",
"saucelabs",
"testmu",
"testingbot",
"digitalai"
],
"description": "Cloud provider"
},
"sortBy": {
"default": "uploaded_at",
"description": "Sort order for results",
"type": "string",
"enum": [
"app_name",
"uploaded_at"
]
},
"organizationWide": {
"description": "(BrowserStack only) List apps uploaded by all users in the organization. Defaults to false (own uploads only).",
"type": "boolean"
},
"limit": {
"default": 20,
"description": "Maximum number of apps to return (only applies when organizationWide is true, default 20)",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"region": {
"default": "eu-central-1",
"description": "Sauce Labs region (default: eu-central-1)",
"type": "string",
"enum": [
"us-west-1",
"eu-central-1",
"apac-southeast-1"
]
}
},
"required": [
"provider"
]
}Annotations{
"title": "List Cloud Provider Apps",
"readOnlyHint": true,
"idempotentHint": true
} | — | — |
navigateLoads a URL in the current tab and waits for the page load event. Resets page state — DOM, JS runtime, timers, and frame context are destroyed. Use instead of clicking links when the target URL is known.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 1,
"description": "The URL to navigate to"
}
},
"required": [
"url"
]
}Annotations{
"title": "Navigate to URL",
"destructiveHint": false,
"idempotentHint": true
} | — | — |
open_web_extensionInstalls a web extension through WebDriver BiDi and opens one of its extension pages so existing MCP tools can inspect and drive its UI. Requires a BiDi-enabled browser session. Use base64 for cloud/remote sessions where the browser driver cannot read the MCP server filesystem.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"extensionData": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "path"
},
"path": {
"type": "string",
"minLength": 1,
"description": "Path to an unpacked extension directory on the remote end."
}
},
"required": [
"type",
"path"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "archivePath"
},
"path": {
"type": "string",
"minLength": 1,
"description": "Path to a packaged extension archive on the remote end."
}
},
"required": [
"type",
"path"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "base64"
},
"value": {
"type": "string",
"minLength": 1,
"description": "Base64-encoded packaged extension archive."
}
},
"required": [
"type",
"value"
]
}
],
"description": "W3C BiDi webExtension.ExtensionData: unpacked directory path, archive path, or base64 archive."
},
"path": {
"type": "string",
"minLength": 1,
"description": "Path inside the extension package, such as options.html or popup.html. Leading slashes are ignored."
}
},
"required": [
"extensionData",
"path"
]
}Annotations{
"title": "Open Web Extension",
"destructiveHint": false
} | — | — |
rotate_deviceRotates a mobile device to portrait or landscape orientation. Waits for the OS rotation animation to complete. Use to test orientation-dependent layouts. Mobile-only; no effect in browser sessions.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"orientation": {
"type": "string",
"enum": [
"PORTRAIT",
"LANDSCAPE"
],
"description": "Device orientation"
}
},
"required": [
"orientation"
]
}Annotations{
"title": "Rotate Device",
"destructiveHint": false,
"idempotentHint": true
} | — | — |
scrollScrolls the page vertically by a pixel amount. Browser-only — for mobile scrolling use swipe. Only supports up/down; no horizontal scrolling.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"direction": {
"type": "string",
"enum": [
"up",
"down"
],
"description": "Scroll direction"
},
"pixels": {
"default": 500,
"description": "Number of pixels to scroll",
"type": "number"
}
},
"required": [
"direction"
]
}Annotations{
"title": "Scroll Page",
"destructiveHint": false
} | — | — |
set_cookieSets a browser cookie on the active session. The browser must already be on the target domain — cookies cannot be set cross-domain. Use to inject session tokens or feature flags without login flows.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Cookie name"
},
"value": {
"type": "string",
"description": "Cookie value"
},
"domain": {
"description": "Cookie domain (defaults to current domain)",
"type": "string"
},
"path": {
"description": "Cookie path (defaults to \"/\")",
"type": "string"
},
"expiry": {
"description": "Expiry date as Unix timestamp in seconds",
"type": "number"
},
"httpOnly": {
"description": "HttpOnly flag",
"type": "boolean"
},
"secure": {
"description": "Secure flag",
"type": "boolean"
},
"sameSite": {
"description": "SameSite attribute",
"type": "string",
"enum": [
"strict",
"lax",
"none"
]
}
},
"required": [
"name",
"value"
]
}Annotations{
"title": "Set Cookie",
"destructiveHint": false,
"idempotentHint": true
} | — | — |
set_geolocationOverrides GPS coordinates for the session. Affects navigator.geolocation in browsers and location services on mobile. Location permissions must already be granted to the app.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "Latitude coordinate"
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "Longitude coordinate"
},
"altitude": {
"description": "Altitude in meters (optional)",
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}Annotations{
"title": "Set Geolocation",
"destructiveHint": false,
"idempotentHint": true
} | — | — |
set_valueClears an input or textarea then types the given text character by character. Always replaces existing content — clearValue() runs first. Triggers input, change, and key events which may fire validation or autocomplete. Scrolls into view by default.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"selector": {
"type": "string",
"description": "Value for the selector, in the form of css selector or xpath (\"button.my-class\" or \"//button[@class='my-class']\")"
},
"value": {
"type": "string",
"description": "Text to enter into the element"
},
"scrollToView": {
"description": "Whether to scroll the element into view before typing",
"type": "boolean"
},
"timeout": {
"description": "Maximum time to wait for element in milliseconds",
"type": "number"
}
},
"required": [
"selector",
"value"
]
}Annotations{
"title": "Set Input Value",
"destructiveHint": false,
"idempotentHint": true
} | — | — |
start_sessionStarts a new browser, local Electron application, or mobile automation session. Only one active session at a time — starting another session closes or detaches from the existing session first. Use attach: true to connect to a running Chrome via CDP.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"provider": {
"default": "local",
"description": "Session provider (default: local). Use \"external\" to connect to an externally managed W3C WebDriver endpoint. \"digitalai\" requires DIGITALAI_CLOUD_URL + DIGITALAI_ACCESS_KEY env vars.",
"type": "string",
"enum": [
"local",
"browserstack",
"saucelabs",
"testmu",
"testingbot",
"digitalai",
"external"
]
},
"platform": {
"type": "string",
"enum": [
"browser",
"electron",
"ios",
"android"
],
"description": "Session platform type"
},
"browser": {
"description": "Browser to launch (required for browser platform)",
"type": "string",
"enum": [
"chrome",
"firefox",
"edge",
"safari"
]
},
"browserVersion": {
"description": "Browser version (cloud providers only, default: latest)",
"type": "string"
},
"electronRootDir": {
"description": "Project root used by the Electron standalone service for Electron Builder/Electron Forge discovery. Electron-only.",
"type": "string",
"minLength": 1
},
"electronDeeplinkScheme": {
"description": "URI scheme allowed by trigger_electron_deeplink, without \":\" (for example, \"myapp\"). Electron-only and optional unless triggering deeplinks.",
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9+.-]*$"
},
"os": {
"description": "Operating system for cloud provider browser sessions (e.g. \"Windows\", \"Mac\", \"macOS\", \"Linux\"). BrowserStack: sets bstack:options.os separately. TestMu/Sauce Labs/TestingBot: combined with osVersion into W3C platformName. Digital.ai: combined with osVersion into the digitalai:osName capability (e.g. \"Mac OS Sequoia\", \"Windows 10\") — required for the grid to match a node. Browser platform only.",
"type": "string"
},
"osVersion": {
"description": "OS version for cloud provider browser sessions (e.g. \"11\", \"15\", \"Monterey\"). BrowserStack: sets bstack:options.osVersion separately. TestMu/Sauce Labs/TestingBot: combined with os into W3C platformName. Digital.ai: combined with os into digitalai:osName. Browser platform only.",
"type": "string"
},
"app": {
"description": "App URL (bs://... for BrowserStack, storage:filename= for Sauce Labs, lt://... for TestMu, tb://... for TestingBot, cloud:<package-or-bundle> for Digital.ai mobile sessions)",
"type": "string"
},
"reporting": {
"description": "Cloud provider reporting labels (project, build, session)",
"type": "object",
"properties": {
"project": {
"type": "string"
},
"build": {
"type": "string"
},
"session": {
"type": "string"
}
}
},
"headless": {
"description": "Run browser in headless mode (default: true)",
"type": "boolean"
},
"windowWidth": {
"default": 1920,
"description": "Browser window width",
"type": "number",
"minimum": 400,
"maximum": 3840
},
"windowHeight": {
"default": 1080,
"description": "Browser window height",
"type": "number",
"minimum": 400,
"maximum": 2160
},
"deviceName": {
"description": "Mobile device/emulator/simulator name (required for ios/android)",
"type": "string"
},
"deviceQuery": {
"description": "Digital.ai device selection query for dynamic allocation, e.g. \"@os='android' and @version='14' and @name='.*Pixel.*'\". Only used with provider: \"digitalai\" mobile sessions; if omitted, one is built from deviceName/platformVersion.",
"type": "string"
},
"platformVersion": {
"description": "OS version for mobile sessions (e.g., \"17.0\", \"14\"). Mobile (ios/android) only.",
"type": "string"
},
"appPath": {
"description": "Path to app file (.app/.apk/.ipa)",
"type": "string"
},
"automationName": {
"description": "Automation driver",
"type": "string",
"enum": [
"XCUITest",
"UiAutomator2"
]
},
"autoGrantPermissions": {
"description": "Auto-grant app permissions (default: true)",
"type": "boolean"
},
"autoAcceptAlerts": {
"description": "Auto-accept alerts (default: true)",
"type": "boolean"
},
"autoDismissAlerts": {
"description": "Auto-dismiss alerts (default: false)",
"type": "boolean"
},
"appWaitActivity": {
"description": "Activity to wait for on Android launch",
"type": "string"
},
"udid": {
"description": "Unique Device Identifier for iOS real device",
"type": "string"
},
"noReset": {
"description": "Preserve app data between sessions",
"type": "boolean"
},
"fullReset": {
"description": "Uninstall app before/after session",
"type": "boolean"
},
"newCommandTimeout": {
"default": 300,
"description": "Appium command timeout in seconds",
"type": "number",
"minimum": 0
},
"trace": {
"description": "Enable trace recording — produces a Playwright-compatible zip saved to .trace/ on close_session, playable at player.vibium.dev.",
"type": "boolean"
},
"attach": {
"description": "Attach to existing Chrome instead of launching",
"type": "boolean"
},
"attachConfig": {
"description": "Chrome remote debugging connection (attach mode only, defaults: port 9222, host localhost)",
"type": "object",
"properties": {
"port": {
"default": 9222,
"type": "number"
},
"host": {
"default": "localhost",
"type": "string"
}
}
},
"webdriverConfig": {
"description": "Existing W3C WebDriver endpoint connection (provider: \"external\" only). Defaults to 127.0.0.1:4445/.",
"type": "object",
"properties": {
"protocol": {
"default": "http",
"type": "string"
},
"hostname": {
"default": "127.0.0.1",
"type": "string"
},
"port": {
"default": 4445,
"type": "number"
},
"path": {
"default": "/",
"type": "string"
}
}
},
"appiumConfig": {
"description": "Appium server connection (local provider only)",
"type": "object",
"properties": {
"host": {
"type": "string"
},
"port": {
"type": "number"
},
"path": {
"type": "string"
},
"protocol": {
"type": "string"
}
}
},
"region": {
"default": "eu-central-1",
"description": "Sauce Labs region (default: eu-central-1). Only used with provider: \"saucelabs\".",
"type": "string",
"enum": [
"us-west-1",
"eu-central-1",
"apac-southeast-1"
]
},
"tunnel": {
"description": "Enable local tunnel routing (cloud providers only, default: false). true = auto-start tunnel before session and stop on close. \"external\" = tunnel already running externally.",
"anyOf": [
{
"type": "string",
"const": "external"
},
{
"type": "boolean"
}
]
},
"tunnelName": {
"description": "Tunnel identifier name. With tunnel: \"external\" this must match the running tunnel. With tunnel: true a unique name is auto-generated if not provided.",
"type": "string"
},
"browserstackLocal": {
"description": "Deprecated: use \"tunnel\" instead. Enable BrowserStack Local tunnel routing.",
"anyOf": [
{
"type": "string",
"const": "external"
},
{
"type": "boolean"
}
]
},
"saucelabsLocal": {
"description": "Deprecated: use \"tunnel\" instead. Enable Sauce Connect tunnel routing.",
"anyOf": [
{
"type": "string",
"const": "external"
},
{
"type": "boolean"
}
]
},
"testmuLocal": {
"description": "Deprecated: use \"tunnel\" instead. Enable TestMu Tunnel routing.",
"anyOf": [
{
"type": "string",
"const": "external"
},
{
"type": "boolean"
}
]
},
"navigationUrl": {
"description": "URL to navigate to after starting",
"type": "string"
},
"capabilities": {
"description": "Additional capabilities to merge. For Electron, configure the official service under \"wdio:electronServiceOptions\" (for example appBinaryPath, appEntryPoint, appArgs, logDir, or captureRendererLogs).",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"platform"
]
}Annotations{
"title": "Start Session",
"destructiveHint": false
} | — | — |
swipePerforms a full-screen swipe gesture. Direction is content movement — "up" scrolls content upward (finger moves down). For browser scrolling use scroll; for dragging a specific element use drag_and_drop. No error if content cannot scroll further. Mobile-only.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"direction": {
"type": "string",
"enum": [
"up",
"down",
"left",
"right"
],
"description": "Swipe direction"
},
"duration": {
"description": "Swipe duration in milliseconds (default: 500)",
"type": "number",
"minimum": 100,
"maximum": 5000
},
"percent": {
"description": "Percentage of screen to swipe (0-1, default: 0.5 for up/down, 0.95 for left/right)",
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"direction"
]
}Annotations{
"title": "Swipe Screen",
"destructiveHint": false
} | — | — |
switch_contextSwitches between native and webview automation contexts in a hybrid mobile app. In NATIVE_APP context, use accessibility IDs; in WEBVIEW_* context, use CSS/XPath. Changes persist for all subsequent commands. Accepts context name or 1-based index. Use get_contexts to discover available targets. Mobile-only.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Context name to switch to (e.g., \"NATIVE_APP\", \"WEBVIEW_com.example.app\", or use index from wdio://session/current/contexts resource)"
}
},
"required": [
"context"
]
}Annotations{
"title": "Switch Context",
"destructiveHint": false,
"idempotentHint": true
} | — | — |
switch_frameSwitches WebDriver frame context into an iframe by CSS/XPath selector, or back to top-level if selector is omitted. Changes persist — all subsequent click_element, set_value, get_elements calls operate within the switched frame until you switch back. Waits up to 5s for the iframe. Browser-only.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"selector": {
"description": "CSS/XPath selector for the iframe element. Omit to switch back to the top-level frame.",
"type": "string"
}
}
}Annotations{
"title": "Switch Frame",
"destructiveHint": false,
"idempotentHint": true
} | — | — |
switch_tabFocuses a browser tab by window handle or 0-based index. All subsequent tool calls operate on the active tab. Provide handle OR index — use get_tabs to find them. Browser-only; use switch_context for mobile webviews.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"handle": {
"description": "Window handle to switch to",
"type": "string"
},
"index": {
"description": "0-based tab index to switch to",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
}
}Annotations{
"title": "Switch Browser Tab",
"destructiveHint": false,
"idempotentHint": true
} | — | — |
tap_elementTaps a matched element via element.tap() or at absolute screen coordinates (x, y). No scroll-into-view or wait — element must already be visible on screen. Use instead of click_element on iOS where element.click() is ignored. Provide selector OR both x and y. Mobile-only.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"selector": {
"description": "Element selector (CSS, XPath, accessibility ID, or UiAutomator)",
"type": "string"
},
"x": {
"description": "X coordinate for screen tap (if no selector provided)",
"type": "number"
},
"y": {
"description": "Y coordinate for screen tap (if no selector provided)",
"type": "number"
}
}
}Annotations{
"title": "Tap Element",
"destructiveHint": false
} | — | — |
trigger_electron_deeplinkTriggers a deeplink through the active Electron application. The Electron session must be started with electronDeeplinkScheme matching the URL scheme. Packaged binaries are required for deeplinks on Windows and Linux.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Deeplink URI to trigger through the Electron service."
}
},
"required": [
"url"
]
}Annotations{
"title": "Trigger Electron Deeplink",
"destructiveHint": true
} | — | — |
upload_appUpload a local .apk or .ipa to a cloud provider (BrowserStack, Sauce Labs, TestMu, TestingBot, or Digital.ai). Returns the app URL for use in start_session.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"browserstack",
"saucelabs",
"testmu",
"testingbot",
"digitalai"
],
"description": "Cloud provider"
},
"path": {
"type": "string",
"description": "Absolute path to the .apk or .ipa file"
},
"customId": {
"description": "Optional custom ID for the app (used to reference it later)",
"type": "string"
},
"region": {
"default": "eu-central-1",
"description": "Sauce Labs region (default: eu-central-1)",
"type": "string",
"enum": [
"us-west-1",
"eu-central-1",
"apac-southeast-1"
]
}
},
"required": [
"provider",
"path"
]
}Annotations{
"title": "Upload App to Cloud Provider",
"destructiveHint": false
} | — | — |
BrowserStack Local binary download URL and daemon setup instructions for the current platform. MUST be read and followed before using browserstackLocal: true in start_session.
{
"resource_key": "wdio://browserstack/local-binary",
"uri": "wdio://browserstack/local-binary",
"name": "browserstack-local-binary",
"description": "BrowserStack Local binary download URL and daemon setup instructions for the current platform. MUST be read and followed before using browserstackLocal: true in start_session.",
"mime_type": null,
"annotations": null,
"metadata_hash": "c7d026ab617640743fc6a5517fcbf0e8b196f9eb560a089049cf0b8f9f3a0fe6"
}Sauce Connect Proxy binary download URL and daemon setup instructions for the current platform. Only needed for tunnel: 'external' — when tunnel: true the SDK auto-manages Sauce Connect for you.
{
"resource_key": "wdio://saucelabs/local-binary",
"uri": "wdio://saucelabs/local-binary",
"name": "saucelabs-local-binary",
"description": "Sauce Connect Proxy binary download URL and daemon setup instructions for the current platform. Only needed for tunnel: 'external' — when tunnel: true the SDK auto-manages Sauce Connect for you.",
"mime_type": null,
"annotations": null,
"metadata_hash": "31269b49a073a0afd6cc1ec1e212b10b421460075c901cd970a496d00f40ad46"
}Accessibility tree for the current page. Returns all elements by default.
{
"resource_key": "wdio://session/current/accessibility",
"uri": "wdio://session/current/accessibility",
"name": "session-current-accessibility",
"description": "Accessibility tree for the current page. Returns all elements by default.",
"mime_type": null,
"annotations": null,
"metadata_hash": "22b592333d2326b79de59721edf3d3510a69bbc1109d3e7efbc561f5ac57c9cb"
}Raw capabilities returned by the WebDriver/Appium server for the current session. Use for debugging — shows the actual values the driver accepted, including defaults applied by BrowserStack or Appium.
{
"resource_key": "wdio://session/current/capabilities",
"uri": "wdio://session/current/capabilities",
"name": "session-current-capabilities",
"description": "Raw capabilities returned by the WebDriver/Appium server for the current session. Use for debugging — shows the actual values the driver accepted, including defaults applied by BrowserStack or Appium.",
"mime_type": null,
"annotations": null,
"metadata_hash": "a62003b30be8df870862054da190c5e2fc63decc495335d9129528dd8e9746e8"
}Generated WebdriverIO JS code for the currently active session
{
"resource_key": "wdio://session/current/code",
"uri": "wdio://session/current/code",
"name": "session-current-code",
"description": "Generated WebdriverIO JS code for the currently active session",
"mime_type": null,
"annotations": null,
"metadata_hash": "de1b69044ce8302439a6e2f2e633ff8ae55d8dc91024fdaf40bc9bac7a96ac5e"
}Currently active context
{
"resource_key": "wdio://session/current/context",
"uri": "wdio://session/current/context",
"name": "session-current-context",
"description": "Currently active context",
"mime_type": null,
"annotations": null,
"metadata_hash": "0c3a202a8173f7ba99666bdbd7b81374bf40b3208fb8897fa75f97e2bce0ed19"
}Available contexts (NATIVE_APP, WEBVIEW)
{
"resource_key": "wdio://session/current/contexts",
"uri": "wdio://session/current/contexts",
"name": "session-current-contexts",
"description": "Available contexts (NATIVE_APP, WEBVIEW)",
"mime_type": null,
"annotations": null,
"metadata_hash": "8804631659a0e55d355cb6b31363e8adec98136d796f493cdbe05d548b760e21"
}Cookies for the current session
{
"resource_key": "wdio://session/current/cookies",
"uri": "wdio://session/current/cookies",
"name": "session-current-cookies",
"description": "Cookies for the current session",
"mime_type": null,
"annotations": null,
"metadata_hash": "11f90c31e5f7f435269637b5cf4c31494f088e0fff4e51b44488f2dad41d1cb1"
}Interactable elements on the current page. Prefer this over screenshot — returns ready-to-use selectors, faster, and far fewer tokens. Only use screenshot for visual verification or debugging.
{
"resource_key": "wdio://session/current/elements",
"uri": "wdio://session/current/elements",
"name": "session-current-elements",
"description": "Interactable elements on the current page. Prefer this over screenshot — returns ready-to-use selectors, faster, and far fewer tokens. Only use screenshot for visual verification or debugging.",
"mime_type": null,
"annotations": null,
"metadata_hash": "f68f34a5d93757cd8bd0bbc1a1330ffe2cbc05839efe2b8c8f3756c15381e134"
}Current device geolocation
{
"resource_key": "wdio://session/current/geolocation",
"uri": "wdio://session/current/geolocation",
"name": "session-current-geolocation",
"description": "Current device geolocation",
"mime_type": null,
"annotations": null,
"metadata_hash": "8976411f7e2e94e5db64ee84dff078a364c556177eee479bdf5d6087aab85b5e"
}Session logs, console errors, and crash reports for the current session. Auto-detects session type — browser: console logs + JS exceptions via getLogs('browser'); Android: system/crash logs via getLogs('logcat'); iOS: crash/panic + system logs via getLogs('crashlog') and getLogs('syslog'). NOTE: Reading this resource clears the log buffer per protocol spec — subsequent reads return only entries accumulated since the last read. Browser logs require Chromium (Chrome/Edge).
{
"resource_key": "wdio://session/current/logs",
"uri": "wdio://session/current/logs",
"name": "session-current-logs",
"description": "Session logs, console errors, and crash reports for the current session. Auto-detects session type — browser: console logs + JS exceptions via getLogs('browser'); Android: system/crash logs via getLogs('logcat'); iOS: crash/panic + system logs via getLogs('crashlog') and getLogs('syslog'). NOTE: Reading this resource clears the log buffer per protocol spec — subsequent reads return only entries accumulated since the last read. Browser logs require Chromium (Chrome/Edge).",
"mime_type": null,
"annotations": null,
"metadata_hash": "16532a9bd42d4bd9c5af4ea1af7c1a0bfd724e88199ddf70220108f6f27767ed"
}Screenshot of the current page
{
"resource_key": "wdio://session/current/screenshot",
"uri": "wdio://session/current/screenshot",
"name": "session-current-screenshot",
"description": "Screenshot of the current page",
"mime_type": null,
"annotations": null,
"metadata_hash": "eccafbd2615f7c888509c7c6bda4d91a818b93b362e089b64aaff0dd78eb858e"
}JSON step log for the currently active session
{
"resource_key": "wdio://session/current/steps",
"uri": "wdio://session/current/steps",
"name": "session-current-steps",
"description": "JSON step log for the currently active session",
"mime_type": null,
"annotations": null,
"metadata_hash": "9465012fbadd3d2de463038ec34b361525afc9d493c63187cf4e9470dac494e9"
}Browser tabs in the current session
{
"resource_key": "wdio://session/current/tabs",
"uri": "wdio://session/current/tabs",
"name": "session-current-tabs",
"description": "Browser tabs in the current session",
"mime_type": null,
"annotations": null,
"metadata_hash": "72d0f1079da41c541999272eb19b24a71e24aeddc0e1320a1591f86f49478089"
}JSON index of all browser and app sessions with metadata and step counts
{
"resource_key": "wdio://sessions",
"uri": "wdio://sessions",
"name": "sessions",
"description": "JSON index of all browser and app sessions with metadata and step counts",
"mime_type": null,
"annotations": null,
"metadata_hash": "18b9a74d018a5c06f83ff80a9a22eea6af9395373f2d554fa8e66a36606ed2f0"
}TestingBot Tunnel download URL and daemon setup instructions. The tunnel is a single cross-platform Java JAR (requires Java 11+). MUST be read and followed before using tunnel: "external" in start_session with provider: testingbot.
{
"resource_key": "wdio://testingbot/local-binary",
"uri": "wdio://testingbot/local-binary",
"name": "testingbot-local-binary",
"description": "TestingBot Tunnel download URL and daemon setup instructions. The tunnel is a single cross-platform Java JAR (requires Java 11+). MUST be read and followed before using tunnel: \"external\" in start_session with provider: testingbot.",
"mime_type": null,
"annotations": null,
"metadata_hash": "589ea960bd68b22f1df7ded22353276252c95cb75b69713ac9b1196cf3598bd7"
}TestMu Tunnel binary download URL and daemon setup instructions for the current platform. MUST be read and followed before using tunnel: true in start_session with provider: testmu.
{
"resource_key": "wdio://testmu/local-binary",
"uri": "wdio://testmu/local-binary",
"name": "testmu-local-binary",
"description": "TestMu Tunnel binary download URL and daemon setup instructions for the current platform. MUST be read and followed before using tunnel: true in start_session with provider: testmu.",
"mime_type": null,
"annotations": null,
"metadata_hash": "0ecfa40aae6498b2dc7996febda15e88dbec3248157a64aca4b7a68f258c6ad2"
}Generated WebdriverIO JS code for a specific session by ID
{
"template_key": "wdio://session/{sessionId}/code",
"uri_template": "wdio://session/{sessionId}/code",
"name": "session-code",
"description": "Generated WebdriverIO JS code for a specific session by ID",
"mime_type": null,
"annotations": null,
"metadata_hash": "65ffb6ef332dc2a4ca447ab6896c127899a182f8ad958fd1b11e1aedce13db6b"
}App state for a given bundle ID
{
"template_key": "wdio://session/current/app-state/{bundleId}",
"uri_template": "wdio://session/current/app-state/{bundleId}",
"name": "session-current-app-state",
"description": "App state for a given bundle ID",
"mime_type": null,
"annotations": null,
"metadata_hash": "5b5a44de59c603e17b86684b103fad25269a8cb81faaa41ce209f776363f2feb"
}JSON step log for a specific session by ID
{
"template_key": "wdio://session/{sessionId}/steps",
"uri_template": "wdio://session/{sessionId}/steps",
"name": "session-steps",
"description": "JSON step log for a specific session by ID",
"mime_type": null,
"annotations": null,
"metadata_hash": "ef47d2a673c4bacc30b1629e76f2c2af580adf1d33d04af9ab5928cbe3227312"
}No completed comparison is available.
| Risk | Change | Subject |
|---|---|---|
| No material changes recorded. | ||
| Severity | Finding | Advisory |
|---|---|---|
| No confirmed vulnerability is published for this version. | ||
Artifact SHA-256: a90a50f4abdd9e0f6d0c08e4168c36e27eacd44583f3034155e9094c2dda0eb7
Scanner: mcp-proof-engine 0.1.0.