BrowserStack MCP Server

Run, debug and manage web and mobile tests on BrowserStack's real-device cloud from an assistant

Official · BrowserStack TypeScript Remote (hosted) · Streamable HTTPLocal · stdio TestingBrowser automation

73 popularity score ★ 154 ↓ 31k/wk

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal; then run /mcp in a session and sign in
claude mcp add --scope user --transport http browserstack https://mcp.browserstack.com/mcp
Claude (desktop and web)Claude marketplace connector, or Settings → Connectors → Add custom connector with the URL
https://mcp.browserstack.com/mcp
ChatGPTInstall the BrowserStack plugin from the README's Add to ChatGPT link
https://mcp.browserstack.com/mcp
CodexTerminal; then codex mcp login browserstack
codex mcp add browserstack --url https://mcp.browserstack.com/mcp
VS CodeTerminal, for VS Code and GitHub Copilot; then start it from the MCP view and sign in
code --add-mcp '{"name":"browserstack","type":"http","url":"https://mcp.browserstack.com/mcp"}'
CursorUnder mcpServers in ~/.cursor/mcp.json; then sign in from Cursor Settings → MCP
"browserstack": { "url": "https://mcp.browserstack.com/mcp" }
Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs BROWSERSTACK_USERNAME, BROWSERSTACK_ACCESS_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add browserstack -e BROWSERSTACK_USERNAME=<BROWSERSTACK_USERNAME> -e BROWSERSTACK_ACCESS_KEY=<BROWSERSTACK_ACCESS_KEY> -- npx -y @browserstack/mcp-server@latest
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "browserstack": {
      "command": "npx",
      "args": [
        "-y",
        "@browserstack/mcp-server@latest"
      ],
      "env": {
        "BROWSERSTACK_USERNAME": "<BROWSERSTACK_USERNAME>",
        "BROWSERSTACK_ACCESS_KEY": "<BROWSERSTACK_ACCESS_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "browserstack": {
      "command": "npx",
      "args": [
        "-y",
        "@browserstack/mcp-server@latest"
      ],
      "env": {
        "BROWSERSTACK_USERNAME": "<BROWSERSTACK_USERNAME>",
        "BROWSERSTACK_ACCESS_KEY": "<BROWSERSTACK_ACCESS_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "browserstack": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@browserstack/mcp-server@latest"
      ],
      "env": {
        "BROWSERSTACK_USERNAME": "<BROWSERSTACK_USERNAME>",
        "BROWSERSTACK_ACCESS_KEY": "<BROWSERSTACK_ACCESS_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.browserstack]
command = "npx"
args = ["-y", "@browserstack/mcp-server@latest"]

[mcp_servers.browserstack.env]
BROWSERSTACK_USERNAME = "<BROWSERSTACK_USERNAME>"
BROWSERSTACK_ACCESS_KEY = "<BROWSERSTACK_ACCESS_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e BROWSERSTACK_USERNAME=<BROWSERSTACK_USERNAME> -e BROWSERSTACK_ACCESS_KEY=<BROWSERSTACK_ACCESS_KEY> browserstack npx -- -y @browserstack/mcp-server@latest

Settings 4

Set together: credentials
BROWSERSTACK_USERNAME Required: BrowserStack username from Account Settings; the local server will not start without it.
BROWSERSTACK_ACCESS_KEY secret Required: BrowserStack access key from Account Settings; the local server will not start without it.
MCP_UPLOAD_BASE_DIR Optional: Folder that file and app uploads are restricted to; upload tools need it. For Upload tools such as runAppLiveSession and uploadProductRequirementFile.
USE_OWN_LOCAL_BINARY_PROCESS Optional: Set to true when you run the BrowserStack Local binary yourself; BROWSERSTACK_LOCAL_OPTION_* settings configure the tunnel otherwise. Default false. For BrowserStack Local tunnel.

What it does

BrowserStack's MCP server connects an assistant to the BrowserStack testing cloud. Through it an assistant can open a website or a mobile app on a real cloud browser or device, add the BrowserStack SDK to a Selenium, Playwright or Appium suite and run it, read failure logs, screenshots and root-cause analysis for failed builds, run accessibility scans, manage Percy visual-test builds, and create and update test cases, runs and plans in Test Management.

It works in two layers. About fifty tools are registered directly by name (server-factory.ts). Five of them (listProducts, searchCapability, describeCapability, describeEntity, invokeCapability) search and call a catalog of several hundred further capabilities, including Load Testing and many Test Management and Test Reporting operations, which docs/TOOLS.md lists under their snake_case names. invokeCapability runs a write only once the user has granted it, and it refuses any capability the catalog marks destructive before the call is made (capability-registry/register.ts). If the catalog index is missing from the package or CAPABILITY_REGISTRY_DISABLED is set, those five tools are left out and the rest still load.

You can run it locally from npm with a username and access key, or use the hosted endpoint at mcp.browserstack.com, which signs in with OAuth. The README only walks through the hosted setup, yet the local server still stops at start when BROWSERSTACK_USERNAME or BROWSERSTACK_ACCESS_KEY is missing (index.ts). The local server also carries a submitFeedback tool that the README never mentions. It sends reports to BrowserStack. For testing localhost sites it reads BROWSERSTACK_LOCAL_OPTION_* settings (proxy, binary path and others) to set up the BrowserStack Local tunnel (config.ts).

What it needs

To run it yourselfNode.js 20.9+
Runs onmacOS, Windows, Linux
BrowserStackPaid planA plan covering the products you use; open-source projects can apply for a free plan

For the local server, the username and access key from BrowserStack Account Settings. The README asks for Node.js 22 or later (22.15 recommended), while package.json accepts 20.9. In Codex, finish sign-in to the hosted endpoint with codex mcp login browserstack. In Claude Code, run /mcp and sign in. The Cursor marketplace plugin runs the local server, so export BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESS_KEY before starting Cursor. Copilot users can add it from github.com/mcp. In Kiro, import the power from integrations/kiro-power in the repository through Powers → Add Custom Power. Upload tools need MCP_UPLOAD_BASE_DIR, and askBrowserStackAI needs the account enrolled in its alpha.

Limits

  • Not covered The hosted endpoint has no Local Testing, so it cannot reach localhost or sites behind a VPN or firewall; use the local npm server for those
  • Not covered The hosted endpoint disables uploadProductRequirementFile, createTestCasesFromFile, addPercySnapshotCommands, listTestFiles and runPercyScan
  • Limit Upload tools refuse files outside MCP_UPLOAD_BASE_DIR and do not work until it is set
  • Read only fetchRCA and prepareSelfHealingPlan only propose fixes; they do not edit code
  • Not covered invokeCapability refuses catalog capabilities marked destructive, so deletes cannot be run through the catalog
  • Early release askBrowserStackAI is alpha with limited availability and returns an entitlement error on accounts not enrolled
  • Early release Its makers say it supports only a subset of the MCP spec, is under active development, and results vary because the client's model picks the calls
  • Cost Needs a BrowserStack plan covering each product used; open-source projects can apply for a free plan

The hosted endpoint cannot do Local Testing, so it cannot reach localhost or sites behind a VPN or firewall, and it disables the tools that touch local files: uploadProductRequirementFile, createTestCasesFromFile, addPercySnapshotCommands, listTestFiles and runPercyScan. Uploads are refused outside MCP_UPLOAD_BASE_DIR. fetchRCA and prepareSelfHealingPlan only propose fixes; they do not edit code. The makers say it supports only part of the MCP spec and is under active development, and that results can vary because the client's model chooses the calls. askBrowserStackAI is alpha and returns an entitlement error on accounts not enrolled.

Who it suits

Teams already paying for BrowserStack who want to start live sessions, wire up SDK test runs, triage failed builds or keep Test Management up to date from an editor or chat. Pick the local npm server when you test localhost or internal sites, since only it can open the Local tunnel, or when you need the file-based tools; pick the hosted endpoint when installing Node or binaries is blocked and OAuth sign-in is preferred over storing an access key. It does nothing without a BrowserStack account, so it does not suit anyone wanting free local browser automation.

Tools 52

31 only read, 21 change things. A ? marks an optional parameter.

listProducts
Lists the BrowserStack products in the capability catalog with a summary of eachquery?: string
describeEntity
Explains one BrowserStack entity: its ID format, related entities and the capabilities acting on itentity: string
searchCapability
Finds catalog capabilities matching a plain-language request within a product; 8 results by defaultquery: stringproduct: stringentity?: stringrouting_token?: stringuser_words?: stringmode?: enumlimit?: numberoffset?: number
describeCapability
Shows one capability's parameters, request body and response shapename?: stringmethod?: stringpath?: stringproduct?: stringinclude_responses?: boolean
invokeCapability changes
Runs one catalog capability; writes need the user's confirmation and deletes are refusedname?: stringmethod?: stringpath?: stringpath_params?: objectquery?: objectbody?: objectproduct?: stringuser_permission?: enumchange_summary?: string
askBrowserStackAI changes
Alpha: passes a multi-step Test Management or reporting task to BrowserStack's own agent; needs account enrolment
submitFeedback changes
Sends a blocker, tool error or feedback report to BrowserStackmessage: stringcategory: enumtoolName?: stringintent?: string
fetchSelfHealedSelectors
Gets self-healed selectors and test source to repair tests broken by DOM changes
prepareSelfHealingPlan
Builds an edit plan pairing old and healed locators; does not edit files itself
createLCASteps changes
Turns a Test Management manual test case into low-code automation steps
uploadProductRequirementFile changes
Uploads a PRD, screenshot or PDF and returns a file mapping ID (local only)
createTestCasesFromFile changes
Generates test cases in bulk from an uploaded requirements file (local only)
createProjectOrFolder changes
Creates a Test Management project and/or folders
createTestCase changes
Adds a manual test case to a project folder
updateTestCase changes
Changes chosen fields of an existing test case
listTestCases
Lists a project's test cases, with folder, type and priority filters
listFolders
Lists folders in a Test Management project or under a parent folder
listTestCaseTemplates
Lists test-case templates and their IDs
createTestRun changes
Creates a test run from selected test cases
listTestRuns
Lists a project's test runs by date, assignee or state
updateTestRun changes
Renames a test run, changes its state or adds cases to it
addTestResult changes
Records a passed, failed, blocked or skipped result for a case in a run
listTestPlans
Lists a project's test plans with run counts
getTestPlan
Fetches one test plan with its runs and status summary
listSubTestPlans
Lists the sub-plans under a test plan
getSubTestPlan
Fetches one sub-plan with its linked runs
runAppLiveSession changes
Uploads a mobile app and opens a manual session on a real cloud device
runBrowserLiveSession changes
Opens a manual Live session for a website on a chosen browser or device
takeAppScreenshot changes
Launches an app on a device and returns a screenshot confirming it started
setupBrowserStackAppAutomateTests
Gives steps to add the App Automate SDK to an Appium project
runAppTestsOnBrowserStack changes
Uploads compiled Espresso or XCUITest suites and runs them on real devices
setupBrowserStackAutomateTests
Gives steps to add the BrowserStack SDK to a web test suite and run it
listSessions
Lists the sessions in an Automate or App Automate build
listTestIds
Lists the tests in a build with status and session ID
fetchAutomationScreenshots
Gets screenshots captured during an automated session
getFailureLogs
Retrieves error logs for Automate or App Automate sessions
getBuildId
Finds your build ID for a project and build name
listBuildId
Finds the latest build ID for a project and build name across all users
fetchBuildInsights
Returns build details combined with quality-gate results
fetchRCA
Returns a root-cause analysis and suggested fix for failed automated tests
startAccessibilityScan changes
Runs a web accessibility scan and returns the path of a local CSV report
fetchAccessibilityIssues
Pages through the issues found by a finished scan
createAccessibilityAuthConfig changes
Saves form or basic login details so scans can reach pages behind a login
getAccessibilityAuthConfig
Reads a saved accessibility login configuration by ID
accessibilityExpert
Answers WCAG and usability questions
percyVisualTestIntegrationAgent
Walks a new project through adding Percy visual tests
expandPercyVisualTesting
Sets up or widens Percy coverage in an existing project
addPercySnapshotCommands changes
Inserts Percy snapshot calls into given test files (local only)
listTestFiles
Lists test files in given directories (local only)
runPercyScan changes
Starts a Percy visual test scan (local only)
fetchPercyChanges
Summarises visual changes Percy found between the last two builds
managePercyBuildApproval changes
Approves or rejects a Percy build

Similar servers