Search / io.github.serkan-ozal/browser-devtools-mcp
browser-devtools-mcp
L0· runs locallyPlaywright browser & Node.js MCP. ARIA refs, screenshots, ref-based interactions.
v0.9.1 · active · repository · website · descriptor JSON · versions
Search / io.github.serkan-ozal/browser-devtools-mcp
L0· runs locallyPlaywright browser & Node.js MCP. ARIA refs, screenshots, ref-based interactions.
v0.9.1 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"browser-devtools-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"OTEL_EXPORTER_HTTP_HEADERS": "${OTEL_EXPORTER_HTTP_HEADERS}",
"FIGMA_ACCESS_TOKEN": "${FIGMA_ACCESS_TOKEN}"
}
}
}
}claude mcp add browser-devtools-mcp -e "OTEL_EXPORTER_HTTP_HEADERS=${OTEL_EXPORTER_HTTP_HEADERS}" -e "FIGMA_ACCESS_TOKEN=${FIGMA_ACCESS_TOKEN}" -- npx -y [email protected][mcp_servers.browser-devtools-mcp]
command = "npx"
args = ["-y", "[email protected]"]
env = { "OTEL_EXPORTER_HTTP_HEADERS" = "${OTEL_EXPORTER_HTTP_HEADERS}", "FIGMA_ACCESS_TOKEN" = "${FIGMA_ACCESS_TOKEN}" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"browser-devtools-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"[email protected]"
],
"enabled": true,
"environment": {
"OTEL_EXPORTER_HTTP_HEADERS": "{env:OTEL_EXPORTER_HTTP_HEADERS}",
"FIGMA_ACCESS_TOKEN": "{env:FIGMA_ACCESS_TOKEN}"
}
}
}
}{
"mcpServers": {
"browser-devtools-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"OTEL_EXPORTER_HTTP_HEADERS": "${OTEL_EXPORTER_HTTP_HEADERS}",
"FIGMA_ACCESS_TOKEN": "${FIGMA_ACCESS_TOKEN}"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=browser-devtools-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImJyb3dzZXItZGV2dG9vbHMtbWNwQDAuOS4xIl0sImVudiI6eyJPVEVMX0VYUE9SVEVSX0hUVFBfSEVBREVSUyI6IiR7T1RFTF9FWFBPUlRFUl9IVFRQX0hFQURFUlN9IiwiRklHTUFfQUNDRVNTX1RPS0VOIjoiJHtGSUdNQV9BQ0NFU1NfVE9LRU59In19"
}{
"servers": {
"browser-devtools-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"OTEL_EXPORTER_HTTP_HEADERS": "${OTEL_EXPORTER_HTTP_HEADERS}",
"FIGMA_ACCESS_TOKEN": "${FIGMA_ACCESS_TOKEN}"
}
}
}
}{
"mcpServers": {
"browser-devtools-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"OTEL_EXPORTER_HTTP_HEADERS": "${OTEL_EXPORTER_HTTP_HEADERS}",
"FIGMA_ACCESS_TOKEN": "${FIGMA_ACCESS_TOKEN}"
}
}
}
}extensions:
"browser-devtools-mcp":
enabled: true
name: "browser-devtools-mcp"
type: stdio
cmd: "npx"
args:
- "-y"
- "[email protected]"
envs:
"OTEL_EXPORTER_HTTP_HEADERS": "${OTEL_EXPORTER_HTTP_HEADERS}"
"FIGMA_ACCESS_TOKEN": "${FIGMA_ACCESS_TOKEN}"
timeout: 300
Placeholders to fill from your own secret store: ${OTEL_EXPORTER_HTTP_HEADERS}, ${FIGMA_ACCESS_TOKEN}. The registry never accepts secret values.
This is a local package: the command runs on your machine.
Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlURL variables carry no secrettools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)stability.changes, stability.rug_pulltool list unknowndeps.known_vulns3 advisories to act on (malicious, or rated high or critical with a fix available): GHSA-f88m-g3jw-g9cj in [email protected] (direct, fixed in 0.35.0), GHSA-rgj7-g3m4-5g8c in [email protected] (direct, fixed in 0.35.4), GHSA-wq5f-xc86-pv6w in [email protected] (direct, fixed in 0.35.5)deps.mcp_sdk_version@modelcontextprotocol/sdk 1.30.1 has 1 known advisory (GHSA-6qxp-vccf-f47h); update @modelcontextprotocol/sdk to 1.31.0 or laterdeps.resolvable[email protected] resolved: 247 packagesNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +website ~liveness-unmeasured ~updated-160d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
[email protected] npm246 dependencies, resolved · MCP SDK @modelcontextprotocol/sdk 1.30.1 · advisories checked 2026-10-19
| advisory | severity | package | fixed in |
|---|---|---|---|
| GHSA-6qxp-vccf-f47hMCP TypeScript SDK: OAuth client could send credentials to an authorization server chosen by the MCP server | high | @modelcontextprotocol/[email protected]MCP SDK, direct | fixed in 1.31.0 |
| GHSA-f88m-g3jw-g9cjsharp inherited vulnerabilities in libvips: CVE-2026-33327, CVE-2026-33328, CVE-2026-35590, CVE-2026-35591 | high | [email protected]direct | fixed in 0.35.0 |
| GHSA-rgj7-g3m4-5g8csharp: Vulnerabilities in libheif: GHSA-g89c-p67h-r497 and GHSA-2jg2-4ch7-h545 | high | [email protected]direct | fixed in 0.35.4 |
| GHSA-wq5f-xc86-pv6wsharp : Vulnerability in librsvg dependency CVE-2026-96889 | high | [email protected]direct | fixed in 0.35.5 |
Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://{your_mcp_server_host}/mcp streamable-http · templated | unknown | not probed | – | – | – | – |
| package | registry | version | runtime | secrets |
|---|---|---|---|---|
browser-devtools-mcp | npm | 0.9.1 | – | OTEL_EXPORTER_HTTP_HEADERS, FIGMA_ACCESS_TOKEN |
No tools observed. Local packages are never executed by the registry.
Schemas: list_tools.
{
"name": "io.github.serkan-ozal/browser-devtools-mcp",
"_meta": {
"io.modelcontextprotocol.registry/publisher-provided": {
"contacts": [
{
"url": "https://github.com/serkan-ozal",
"name": "Serkan Ozal",
"email": "[email protected]"
}
],
"keywords": [
"ai",
"automation",
"browser",
"debugging",
"mcp",
"nodejs",
"observability",
"opentelemetry",
"playwright",
"source-map",
"testing",
"web"
],
"documentationUrl": "https://github.com/serkan-ozal/browser-devtools-mcp#readme"
}
},
"icons": [
{
"src": "https://browser-devtools.com/assets/icons/icon.png",
"mimeType": "image/png"
},
{
"src": "https://browser-devtools.com/assets/icons/icon.svg",
"sizes": [
"any"
],
"mimeType": "image/svg+xml"
}
],
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://{your_mcp_server_host}/mcp",
"type": "streamable-http",
"variables": {
"your_mcp_server_host": {
"isRequired": true,
"description": "Your self-hosted MCP server host (host:port, without scheme)."
}
}
}
],
"version": "0.9.1",
"packages": [
{
"version": "0.9.1",
"transport": {
"type": "stdio"
},
"identifier": "browser-devtools-mcp",
"registryType": "npm",
"registryBaseUrl": "https://registry.npmjs.org",
"environmentVariables": [
{
"name": "PLATFORM",
"format": "string",
"description": "Platform: browser (default) or node for Node.js backend debugging."
},
{
"name": "PORT",
"format": "number",
"description": "Port for HTTP transport."
},
{
"name": "SESSION_IDLE_SECONDS",
"format": "number",
"description": "Idle session timeout (seconds)."
},
{
"name": "SESSION_IDLE_CHECK_SECONDS",
"format": "number",
"description": "Interval for checking idle sessions (seconds)."
},
{
"name": "SESSION_CLOSE_ON_SOCKET_CLOSE",
"format": "boolean",
"description": "Close session when socket closes."
},
{
"name": "CONSOLE_MESSAGES_BUFFER_SIZE",
"format": "number",
"description": "Maximum console messages to buffer."
},
{
"name": "HTTP_REQUESTS_BUFFER_SIZE",
"format": "number",
"description": "Maximum HTTP requests to buffer."
},
{
"name": "BROWSER_SERVER_INSTRUCTIONS_ENABLE",
"format": "boolean",
"description": "When true, include server instructions in MCP server info (browser platform). Default: true."
},
{
"name": "BROWSER_POLICY_UI_DEBUGGING_ENABLE",
"format": "boolean",
"description": "When true, include UI_DEBUGGING_POLICY in server policies (browser platform). Default: false."
},
{
"name": "BROWSER_HEADLESS_ENABLE",
"format": "boolean",
"description": "Run browser in headless mode."
},
{
"name": "BROWSER_PERSISTENT_ENABLE",
"format": "boolean",
"description": "Use persistent browser context (preserves cookies, localStorage, extensions)."
},
{
"name": "BROWSER_CDP_ENDPOINT_URL",
"format": "string",
"description": "CDP attach: http(s) root or ws(s) URL. Resolves via /json/version, /json/list, or ws /devtools/browser (Chrome 136+). Mutually exclusive with BROWSER_PERSISTENT_ENABLE."
},
{
"name": "BROWSER_CDP_ENABLE",
"format": "boolean",
"description": "When true and no BROWSER_CDP_ENDPOINT_URL: probe 127.0.0.1:9222 then :9229 for CDP. Else use BROWSER_CDP_ENDPOINT_URL or default http://127.0.0.1:9222."
},
{
"name": "BROWSER_CDP_OPEN_INSPECT",
"format": "boolean",
"description": "On loopback CDP failure, if Chrome is running, open chrome://inspect/#remote-debugging. Default true. Set false to disable."
},
{
"name": "BROWSER_PERSISTENT_USER_DATA_DIR",
"format": "string",
"description": "Directory for persistent browser context user data."
},
{
"name": "BROWSER_USE_INSTALLED_ON_SYSTEM",
"format": "boolean",
"description": "Use system-installed Chrome browser instead of Playwright's bundled browser."
},
{
"name": "BROWSER_EXECUTABLE_PATH",
"format": "string",
"description": "Custom browser executable path."
},
{
"name": "BROWSER_CHROMIUM_SANDBOX",
"format": "boolean",
"description": "When false, launches Chromium with --no-sandbox. Required for Docker/Lambda/CI."
},
{
"name": "BROWSER_LAUNCH_ARGS",
"format": "string",
"description": "Extra Chromium launch args (comma-separated)."
},
{
"name": "BROWSER_ALLOWED_DOMAINS",
"format": "string",
"description": "Comma-separated list of allowed hostnames. When set, all requests to non-matching hosts are aborted. Subdomains match automatically."
},
{
"name": "BROWSER_LOCALE",
"format": "string",
"description": "Browser locale (e.g., \"en-US\", \"tr-TR\")."
},
{
"name": "OTEL_ENABLE",
"format": "boolean",
"description": "Enable OpenTelemetry integration."
},
{
"name": "OTEL_SERVICE_NAME",
"format": "string",
"description": "OpenTelemetry service name."
},
{
"name": "OTEL_SERVICE_VERSION",
"format": "string",
"description": "OpenTelemetry service version."
},
{
"name": "OTEL_ASSETS_DIR",
"format": "string",
"description": "Directory containing OpenTelemetry bundle files."
},
{
"name": "OTEL_INSTRUMENTATION_USER_INTERACTION_EVENTS",
"format": "string",
"description": "User interaction events to instrument (comma-separated, e.g., \"click,submit\")."
},
{
"name": "OTEL_EXPORTER_TYPE",
"format": "string",
"description": "OpenTelemetry exporter type: \"otlp/http\", \"console\", or \"none\"."
},
{
"name": "OTEL_EXPORTER_HTTP_URL",
"format": "string",
"description": "OpenTelemetry collector base URL (e.g., \"http://localhost:4318\")."
},
{
"name": "OTEL_EXPORTER_HTTP_HEADERS",
"format": "string",
"isSecret": true,
"description": "OpenTelemetry exporter HTTP headers (comma-separated key=value pairs)."
},
{
"name": "AWS_REGION",
"format": "string",
"description": "AWS region for Bedrock usage."
},
{
"name": "AWS_PROFILE",
"format": "string",
"description": "AWS profile name for Bedrock usage."
},
{
"name": "AMAZON_BEDROCK_ENABLE",
"format": "boolean",
"description": "Enable Amazon Bedrock usage."
},
{
"name": "AMAZON_BEDROCK_IMAGE_EMBED_MODEL_ID",
"format": "string",
"description": "Amazon Bedrock image embedding model ID."
},
{
"name": "AMAZON_BEDROCK_TEXT_EMBED_MODEL_ID",
"format": "string",
"description": "Amazon Bedrock text embedding model ID."
},
{
"name": "AMAZON_BEDROCK_VISION_MODEL_ID",
"format": "string",
"description": "Amazon Bedrock vision model ID."
},
{
"name": "FIGMA_ACCESS_TOKEN",
"format": "string",
"isSecret": true,
"description": "Figma API access token for design comparison."
},
{
"name": "FIGMA_API_BASE_URL",
"format": "string",
"description": "Figma API base URL."
},
{
"name": "DAEMON_PORT",
"format": "number",
"description": "Daemon mode port (CLI)."
},
{
"name": "DAEMON_SESSION_IDLE_SECONDS",
"format": "number",
"description": "Daemon mode idle session timeout (seconds)."
},
{
"name": "DAEMON_SESSION_IDLE_CHECK_SECONDS",
"format": "number",
"description": "Daemon mode idle session check interval (seconds)."
},
{
"name": "NODE_SERVER_INSTRUCTIONS_ENABLE",
"format": "boolean",
"description": "When true, include server instructions in MCP server info (node platform). Default: true."
},
{
"name": "NODE_POLICY_DEBUGGING_ENABLE",
"format": "boolean",
"description": "When true, include NODE_DEBUGGING_POLICY in server policies (node platform). Default: false."
},
{
"name": "NODE_INSPECTOR_HOST",
"format": "string",
"description": "Inspector host for debug_connect when MCP runs in Docker (e.g. host.docker.internal). Default: 127.0.0.1."
},
{
"name": "TOOL_OUTPUT_SCHEMA_DISABLE",
"format": "boolean",
"description": "When true, omit tool output schema from MCP tool registration (can reduce token usage for some clients)."
},
{
"name": "AVAILABLE_TOOL_DOMAINS",
"format": "string",
"description": "Comma-separated tool domains to enable (e.g. navigation,interaction,a11y,scenario). Unset = all tools. Browser: a11y, content, debug, figma, interaction, navigation, o11y, react, scenario, run, stub, sync. Node: debug, run."
},
{
"name": "WORKING_DIR",
"format": "string",
"description": "Working directory for project-level config (.browser-devtools-mcp/). Default: process.cwd()."
},
{
"name": "SEARCH_STRATEGY",
"format": "string",
"description": "Search strategy: SIMPLE (default, minisearch + stemmer) or FTS5 (better-sqlite3, optional dep)."
},
{
"name": "SCENARIO_SEARCH_STRATEGY",
"format": "string",
"description": "Override SEARCH_STRATEGY for scenario search only."
}
]
}
],
"repository": {
"url": "https://github.com/serkan-ozal/browser-devtools-mcp",
"source": "github"
},
"websiteUrl": "https://github.com/serkan-ozal/browser-devtools-mcp",
"description": "Playwright browser & Node.js MCP. ARIA refs, screenshots, ref-based interactions."
}