Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.webdriverio/mcp

NPM · @WDIO/MCP

MCP server with WebdriverIO for browser and mobile app automation (iOS/Android via Appium)

Available components

−2 this week 80 Trust /100

Last scanned (40 minutes ago)

Scores higher than 65% of npm servers

Category Browser Automation

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security88
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known medium-severity CVE affects glob 10.5.0, reached via @wdio/electron-service > webdriverio > @wdio/config > glob. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • Dependency health was assessed across the 400 of 591 dependencies we could resolve, so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to webdriverio/mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 5 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability83
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 3289 tokens (~93/item across 35 items; 17 tools + 18 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management9
  • Stability check failed: the tool surface changed between 3.14.0 and 4.1.0: 25 tool removals, 0 breaking changes, 5 additions. See how to fix → Fail
Tool Coverage94
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 83% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 −3

    No change was recorded against any check on this day. Stability & Change Management went from 32 to 9.

  • 31 Oct 26 +23
    • CVE-2026-118764 affects this package: medium ▼ security
    • CVE-2026-118773 affects this package: medium ▼ security
    • Known CVEs: unverified → fail ▼ security
    • CVE-2023-54404 no longer affects this package ▲ security
    • Malware scan: unverified → pass ▲ security
    • Dependency health: unverified → partial ▲ functional
  • 30 Oct 26 −22
    • Malware scan: pass → unverified ▼ security
    • Known CVEs: fail → unverified ▼ security
    • Schema quality: 79 → 93 ▼ functional
    • Dependency health: partial → unverified ▼ functional
    • Tool coverage: 78% → 83% ▲ functional
    • Package version: 4.0.1 → 4.1.0 functional
  • 25 Oct 26 −11
    • Stability: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Stability: pass → fail ▼ security
    • CVE-2026-40345 no longer affects this package ▲ security
    • Tool coverage: 99% → 78% ▼ functional
    • Security disclosure: unverified → fail ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Schema quality: fail → pass ▲ functional
    • Schema quality: excellent → good functional
    • Package version: 3.14.0 → 4.0.1 functional
  • 24 Oct 26 0
    • CVE-2023-54404 affects this package: high ▼ security
    • Security disclosure: fail → unverified ▼ functional
  • 22 Oct 26 +1
    • Stability: 0.97 → pass security
  • 21 Oct 26 −1
    • Stability: pass → 0.97 functional
  • 17 Oct 26 +3
    • Stability: 0.80 → pass security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed npm/@wdio/mcp@4.1.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo webdriverio/mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/webdriverio/mcp/.github/workflows/release.yml@refs/heads/main
Rekor log index 3591541453
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:c291d3d9ce2b30553ec8577c00a1466304e162a5c06cbfa2febaf0eae367bab933335b0286bfddb8b54d4aa4907dea7b27a16b9f81239d3fd7c4f5b08

Background: How many MCP packages publish verified provenance →

Vulnerabilities 2 findings
ID CVE Severity Vector Fix available
GHSA-3g3m-2fjr-6pw4 CVE-2026-118773 medium yes
GHSA-g3hv-75wg-m249 CVE-2026-118764 medium yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 400 packages
Packages resolved 400
Deprecated 1
Stale 109
Tree resolution Partial

The dependency tree was only partially resolved, so these counts may be incomplete.

Background: SBOMs and build attestations, explained →

MCP tools · 17 exposed · ~2,562 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
click_element ~111

Clicks an element. On web pages the result lists what changed (new elements with refs, or the new page). In apps it does not: take a snapshot to see the new screen. Several steps in a row: perform_actions.

NameTypeReqDescription
selectorstringyesRef from snapshot (e12) or selector: CSS, XPath, "button=Exact text", "a*=Partial text"
sessionstring–Target session: map name or sessionId. Omit to use the default session.

No output schema declared.

No examples provided.

close_session ~71

Closes the session, or with detach: true disconnects and leaves it running. Attached sessions and Appium sessions with noReset are detached unless detach: false.

NameTypeReqDescription
detachboolean––
sessionstring–Target session: map name or sessionId. Omit to use the default session.

No output schema declared.

No examples provided.

enable_tools ~111

Adds more tools: mocks (mock network requests or Electron APIs); cookies (read, set and delete cookies); device (emulate a phone or tablet, fake the location); extensions (install and open a browser extension); attach (launch Chrome with remote debugging, attach to a running WebDriver or Appium session); elements (raw element list with bounds); cloud-apps (upload and list mobile apps on BrowserStack, Sauce Labs, TestMu, TestingBot, Digital.ai).

NameTypeReqDescription
groupsarrayyes–

No output schema declared.

No examples provided.

execute_script ~115

Runs JavaScript in the page (`return` a value; string args that match a selector are passed as elements) or, on Appium, a "mobile: <command>" with args. Prefer the dedicated tools for clicks and typing.

NameTypeReqDescription
argsarray–Script arguments, or the mobile command's parameters
scriptstringyesJavaScript, or "mobile: <command>" on Appium
sessionstring–Target session: map name or sessionId. Omit to use the default session.

No output schema declared.

No examples provided.

get_screenshot ~58

Takes a screenshot of the current page or screen and returns a base64-encoded image, resized and compressed for model context limits.

NameTypeReqDescription
sessionstring–Target session: map name or sessionId. Omit to use the default session.

No output schema declared.

No examples provided.

get_tabs ~62

Lists all browser tabs with handle, title, URL, and which is active. Use before switch_tab to find the target handle or index. Browser-only.

NameTypeReqDescription
sessionstring–Target session: map name or sessionId. Omit to use the default session.

No output schema declared.

No examples provided.

navigate ~87

Loads 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.

NameTypeReqDescription
sessionstring–Target session: map name or sessionId. Omit to use the default session.
urlstringyesThe URL to navigate to

No output schema declared.

No examples provided.

perform_actions ~144

Runs several actions in one call, e.g. fill a form and submit it, on the page or app screen, and returns what each one changed on web pages. Steps the current session does not support are rejected before any step runs. Stops at the first failure, when a step loads a new page, or before a key press that follows a click, select, check or uncheck that changed the page (continue with the new refs). value is the text for fill, the option for select and the keys for press.

NameTypeReqDescription
actionsarrayyes–
sessionstring–Target session: map name or sessionId. Omit to use the default session.

No output schema declared.

No examples provided.

press_key ~102

Presses a key or combination in the focused element, e.g. Enter, Tab, Escape, Control+a. The result lists what changed on the page. Several steps in a row: perform_actions.

NameTypeReqDescription
keysstringyesKey or combination
sessionstring–Target session: map name or sessionId. Omit to use the default session.
timesinteger–Press it this many times, e.g. to move a slider

No output schema declared.

No examples provided.

query_docs ~269

Search the official WebdriverIO documentation and return the most relevant excerpts with page, section and source URL. Use before answering any question about WebdriverIO APIs, configuration, services, reporters, selectors, or debugging. Query with 2-3 distinctive keywords, never a sentence: "appium setup", "devtools trace.zip" and "allure reporter" each return the right page first, while "how do I wire up appium in my config file" does not. A word can also collide with an unrelated page — `wire` matches Wire Protocol — so if a query misses, retry with the exact page title, which beats any paraphrase. Set fullPage for the whole page. To browse instead, read wdio://docs/index for every page title and its slug, then wdio://docs/page/{slug} for one page in full. Cite the `path` of any page you rely on.

NameTypeReqDescription
fullPageboolean–Return the full matched pages instead of excerpts
limitinteger––
querystringyes2-3 distinctive keywords: an API name, config key, page title or feature (e.g. "appium setup", "devtools trace.zip", "browserstack capabilities"). A sentence dilutes the ranking.

No output schema declared.

No examples provided.

scroll ~79

Scrolls the page vertically by a pixel amount. Browser-only — for mobile scrolling use swipe. Only supports up/down; no horizontal scrolling.

NameTypeReqDescription
directionstringyesScroll direction
pixelsnumber–Number of pixels to scroll
sessionstring–Target session: map name or sessionId. Omit to use the default session.

No output schema declared.

No examples provided.

select_option ~91

Selects an option of a <select> by its text. The result lists what changed on the page. Several steps in a row: perform_actions.

NameTypeReqDescription
selectorstringyesRef from snapshot (e12) or selector of the <select>
sessionstring–Target session: map name or sessionId. Omit to use the default session.
valuestringyesOption text

No output schema declared.

No examples provided.

set_value ~136

Replaces the text of an input or textarea. On web pages the result lists what changed (new elements with refs, or the new page). In apps it does not: take a snapshot to see the new screen. To fill several fields or fill and then click, use one perform_actions call.

NameTypeReqDescription
selectorstringyesRef from snapshot (e12) or selector: CSS, XPath, "button=Exact text", "a*=Partial text"
sessionstring–Target session: map name or sessionId. Omit to use the default session.
valuestringyesText to enter into the element

No output schema declared.

No examples provided.

snapshot ~183

The page or app screen as an accessibility tree with refs, e.g. `button "Save" [ref=e3]`. Pass refs to perform_actions for several steps, or to click_element/set_value/select_option for one. Default: interactive elements only, plain text is dropped; full: true shows it. find returns only the parts of the page that contain the text (with their refs); full: true includes all text; viewport: true limits it to what is on screen (not together with find).

NameTypeReqDescription
findstring–Text to look for
fullboolean–Include text, not just interactive elements
scopestring–Only below this ref or selector
sessionstring–Target session: map name or sessionId. Omit to use the default session.
viewportboolean–Only what is on screen

No output schema declared.

No examples provided.

start_session ~773

Starts a browser, Electron app or mobile app session (closes the active one unless onExisting: "keep"). Browsers run headless at 1280x800 by default; pass navigationUrl to open a page right away. attach: true connects to a running Chrome via CDP.

NameTypeReqDescription
appstring–Cloud app URL from upload_app (bs://, storage:filename=, lt://, tb://, cloud:<name>)
appPathstring–Mobile: local .app/.apk/.ipa
appWaitActivitystring–Android launch activity to wait for
appiumConfigobject–Local Appium server
attachboolean–Attach to a running Chrome (attachConfig, default localhost:9222)
attachConfigobject––
autoAcceptAlertsboolean–Mobile, default true
autoDismissAlertsboolean––
autoGrantPermissionsboolean–Mobile, default true
automationNamestring––
browserstring–Required for platform browser
browserVersionstring–Cloud only
browserstackLocal––Deprecated: tunnel
capabilitiesobject–Extra capabilities to merge, e.g. "wdio:electronServiceOptions"
deviceNamestring–Mobile: device, emulator or simulator name (required)
deviceQuerystring–Digital.ai mobile device query
electronDeeplinkSchemestring–Electron: URI scheme (no ":") allowed for trigger_electron_deeplink
electronRootDirstring–Electron: project root for Builder/Forge discovery
fullResetboolean––
headlessboolean––
namestring–Name for this session, unique among live sessions. Target it from other tools with session: <name>.
navigationUrlstring–URL to open after starting
networkLogsstring–Local Chromium performance log capture (default from WDIO_MCP_NETWORK_LOGS or "none")
newCommandTimeoutnumber–Appium, seconds
noResetboolean––
onExistingstring–close (default) replaces the active session. keep is an explicit opt-in to run this session alongside the existing ones; the new session is NOT made the default when one exists, so target it with ses…
osstring–Cloud browser OS, provider-native, passed as-is: BrowserStack "OS X"/"Windows", Sauce Labs and TestMu "macOS"/"Windows", TestingBot "SEQUOIA"/"WIN11"
osVersionstring–Cloud browser OS version, provider-native: BrowserStack and TestMu "Sequoia", Sauce Labs "15", Windows "11"; omit for TestingBot
platformstringyes–
platformVersionstring–Mobile OS version, e.g. "17.0"
providerstring–Default local. Cloud providers read credentials from env. external: a W3C WebDriver endpoint (webdriverConfig).
regionstring–Sauce Labs only
reportingobject–Cloud reporting labels
saucelabsLocal––Deprecated: tunnel
testmuLocal––Deprecated: tunnel
traceboolean–Save a Playwright-compatible trace zip to .trace/ on close_session
tunnel––Cloud: true starts a tunnel, "external" uses a running one
tunnelNamestring––
udidstring–iOS real device UDID
webdriverConfigobject–provider external only
windowHeightnumber––
windowWidthnumber––

No output schema declared.

No examples provided.

switch_frame ~88

Switches into an iframe (ref or selector), or back to the top page when selector is omitted. Later tools act inside the frame until you switch back. Returns the frame's elements.

NameTypeReqDescription
selectorstring–Ref or selector of the iframe; omit for the top page
sessionstring–Target session: map name or sessionId. Omit to use the default session.

No output schema declared.

No examples provided.

switch_tab ~82

Switches to a tab by handle or 0-based index (see get_tabs). Later tools act on that tab.

NameTypeReqDescription
handlestring–Window handle to switch to
indexinteger–0-based tab index to switch to
sessionstring–Target session: map name or sessionId. Omit to use the default session.

No output schema declared.

No examples provided.

Install

How do I install the io.github.webdriverio/mcp server?

io.github.webdriverio/mcp runs locally as an npm package, launched with npx -y @wdio/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @wdio/mcp

# add to Claude Code
claude mcp add webdriverio-mcp -- npx -y @wdio/mcp
Common questions

What is the io.github.webdriverio/mcp server?

io.github.webdriverio/mcp is listed in the public MCP registry as io.github.webdriverio/mcp. MCP server with WebdriverIO for browser and mobile app automation (iOS/Android via Appium). This page covers its npm package (@wdio/mcp).

Is the io.github.webdriverio/mcp server safe to use?

io.github.webdriverio/mcp scores 80 out of 100 on VerifyMCP. We recorded 2 known advisories against it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.webdriverio/mcp server expose?

io.github.webdriverio/mcp exposes 17 tools: start_session, close_session, navigate, switch_tab, switch_frame, and 12 more. Their descriptions and schemas cost roughly 2,562 tokens of context every time the server is loaded.

Is the io.github.webdriverio/mcp server still maintained?

io.github.webdriverio/mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.webdriverio/mcp server under?

io.github.webdriverio/mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.