MCP server intelligence profile

Playwright MCP Server

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots

Local OnlyOfficial distributionmicrosoft
Verified cleanNpm · 0.0.79

Our scanner tested version 0.0.79 without proving a finding in the methods exercised. This is not a guarantee that every deployment is secure.

1Distribution channel
24Independently observed tools
1Linked remote endpoint
AvailableVersion intelligence

Install and connect

Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.

Install @playwright/mcp from npm

Version 0.0.79 declares 1 executable entrypoint.

npm install --save-exact @playwright/mcp@0.0.79
npx -y -p @playwright/mcp@0.0.79 @playwright/mcp
MCP client configuration example
{
  "mcpServers": {
    "@playwright/mcp": {
      "command": "npx",
      "args": [
        "-y",
        "-p",
        "@playwright/mcp@0.0.79",
        "@playwright/mcp"
      ]
    }
  }
}

Identity

Canonical slugplaywright-mcp-server-90c44e5cDeploymentLocal Only
Canonical packagenpm:@playwright/mcpRepositorymicrosoft/playwright-mcp
First publishedLatest release
Last security verificationAug 15, 2026Classification confidence90%
PublicationPublishedOfficial distributionYes

Distributions

ChannelIdentifierCurrent versionVersionsSource
npm@playwright/mcp0.0.79419Repository

Current release

PackageVersionPublished / observedInventorySecurity scan
npm@playwright/mcp0.0.79CurrentSep 5, 202624 toolsSucceeded · 0 resources · 0 promptsVerified clean
Enterprise protection

Continuously monitor this MCP for security risk

Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.

  • Independent exact-version security scans
  • Continuous release and vulnerability monitoring
  • Risk-change alerts with capability context
  • Historical evidence and API exports
Custom pricingContact salesTailored to your organization, integrations, data needs, and support requirements.

Current version evidence

Provenanceartifact_hash_verifiedSignature
MCP SDKArtifact SHA-256c35077b88e070b57b15db0040991289eeaf19bccbd397a41898f28654a1d33ee
Scannermcp-proof-engine 0.1.0Scan completedAug 15, 2026
Security rating30 / 100Methodologyversion-rating-1.0
Executable entrypoints
[
  "@playwright/mcp"
]
Rating reasons
[
  "security_policy_not_observed"
]
0Proven
2072Clean
0Inconclusive
0Flaky
0Errors

Current protocol inventory

2025-06-18Negotiated protocol
PlaywrightServer-reported name
1Capability groups
Aug 14, 2026Observed

Tools 24

ToolCategoryAnnotationsRisk
browser_clickPerform click on a web page
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "element": {
      "description": "Human-readable element description used to obtain permission to interact with the element",
      "type": "string"
    },
    "target": {
      "type": "string",
      "description": "Exact target element reference from the page snapshot, or a unique element selector"
    },
    "doubleClick": {
      "description": "Whether to perform a double click instead of a single click",
      "type": "boolean"
    },
    "button": {
      "description": "Button to click, defaults to left",
      "type": "string",
      "enum": [
        "left",
        "right",
        "middle"
      ]
    },
    "modifiers": {
      "description": "Modifier keys to press",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "Alt",
          "Control",
          "ControlOrMeta",
          "Meta",
          "Shift"
        ]
      }
    }
  },
  "required": [
    "target"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Click",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_closeClose the page
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Annotations
{
  "title": "Close browser",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_console_messagesReturns all console messages
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "level": {
      "default": "info",
      "description": "Level of the console messages to return. Each level includes the messages of more severe levels. Defaults to \"info\".",
      "type": "string",
      "enum": [
        "error",
        "warning",
        "info",
        "debug"
      ]
    },
    "all": {
      "description": "Return all console messages since the beginning of the session, not just since the last navigation. Defaults to false.",
      "type": "boolean"
    },
    "filename": {
      "description": "Filename to save the console messages to. If not provided, messages are returned as text.",
      "type": "string"
    }
  },
  "required": [
    "level"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Get console messages",
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read onlyNon-destructiveOpen world
browser_dragPerform drag and drop between two elements
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "startElement": {
      "description": "Human-readable source element description used to obtain the permission to interact with the element",
      "type": "string"
    },
    "startTarget": {
      "type": "string",
      "description": "Exact target element reference from the page snapshot, or a unique element selector"
    },
    "endElement": {
      "description": "Human-readable target element description used to obtain the permission to interact with the element",
      "type": "string"
    },
    "endTarget": {
      "type": "string",
      "description": "Exact target element reference from the page snapshot, or a unique element selector"
    }
  },
  "required": [
    "startTarget",
    "endTarget"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Drag mouse",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_dropDrop files or MIME-typed data onto an element, as if dragged from outside the page. At least one of "paths" or "data" must be provided.
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "element": {
      "description": "Human-readable element description used to obtain permission to interact with the element",
      "type": "string"
    },
    "target": {
      "type": "string",
      "description": "Exact target element reference from the page snapshot, or a unique element selector"
    },
    "paths": {
      "description": "Absolute paths to files to drop onto the element.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "data": {
      "description": "Data to drop, as a map of MIME type to string value (e.g. {\"text/plain\": \"hello\", \"text/uri-list\": \"https://example.com\"}).",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "required": [
    "target"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Drop files or data onto an element",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_evaluateEvaluate JavaScript expression on page or element
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "element": {
      "description": "Human-readable element description used to obtain permission to interact with the element",
      "type": "string"
    },
    "target": {
      "description": "Exact target element reference from the page snapshot, or a unique element selector",
      "type": "string"
    },
    "function": {
      "type": "string",
      "description": "() => { /* code */ } or (element) => { /* code */ } when element is provided"
    },
    "filename": {
      "description": "Filename to save the result to. If not provided, result is returned as text.",
      "type": "string"
    }
  },
  "required": [
    "function"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Evaluate JavaScript",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_file_uploadUpload one or multiple files
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "paths": {
      "description": "The absolute paths to the files to upload. Can be single file or multiple files. If omitted, file chooser is cancelled.",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
Annotations
{
  "title": "Upload files",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_fill_formFill multiple form fields
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "fields": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "element": {
            "description": "Human-readable element description used to obtain permission to interact with the element",
            "type": "string"
          },
          "target": {
            "type": "string",
            "description": "Exact target element reference from the page snapshot, or a unique element selector"
          },
          "name": {
            "type": "string",
            "description": "Human-readable field name"
          },
          "type": {
            "type": "string",
            "enum": [
              "textbox",
              "checkbox",
              "radio",
              "combobox",
              "slider"
            ],
            "description": "Type of the field"
          },
          "value": {
            "type": "string",
            "description": "Value to fill in the field. If the field is a checkbox, the value should be `true` or `false`. If the field is a combobox, the value should be the text of the option."
          }
        },
        "required": [
          "target",
          "name",
          "type",
          "value"
        ],
        "additionalProperties": false
      },
      "description": "Fields to fill in"
    }
  },
  "required": [
    "fields"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Fill form",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_findSearch the accessibility snapshot of the current page for text or a regular expression. Returns matching snapshot nodes with a few lines of surrounding context (like search snippets), each shown under its path from the root of the tree, which is cheaper than capturing the whole snapshot when you only need to locate an element and its ref.
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "text": {
      "description": "Plain text to search for in the page snapshot (case-insensitive substring match). Provide either text or regex, not both.",
      "type": "string"
    },
    "regex": {
      "description": "Regular expression to search for in the page snapshot. Matching is case-sensitive by default; wrap the pattern in slashes to add flags, e.g. \"/error/i\" for case-insensitive. Provide either text or regex, not both.",
      "type": "string"
    }
  },
  "additionalProperties": false
}
Annotations
{
  "title": "Find in page snapshot",
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read onlyNon-destructiveOpen world
browser_handle_dialogHandle a dialog
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "accept": {
      "type": "boolean",
      "description": "Whether to accept the dialog."
    },
    "promptText": {
      "description": "The text of the prompt in case of a prompt dialog.",
      "type": "string"
    }
  },
  "required": [
    "accept"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Handle a dialog",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_hoverHover over element on page
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "element": {
      "description": "Human-readable element description used to obtain permission to interact with the element",
      "type": "string"
    },
    "target": {
      "type": "string",
      "description": "Exact target element reference from the page snapshot, or a unique element selector"
    }
  },
  "required": [
    "target"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Hover mouse",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_navigateNavigate to a URL
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "The URL to navigate to"
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Navigate to a URL",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_navigate_backGo back to the previous page in the history
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Annotations
{
  "title": "Go back",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_network_requestReturns full details (headers and body) of a single network request, or a single part if `part` is set. Use the number from browser_network_requests.
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "index": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991,
      "description": "1-based index of the request, as printed by browser_network_requests."
    },
    "part": {
      "description": "Return only this part of the request. Omit to return full details.",
      "type": "string",
      "enum": [
        "request-headers",
        "request-body",
        "response-headers",
        "response-body"
      ]
    },
    "filename": {
      "description": "Filename to save the result to. If not provided, output is returned as text.",
      "type": "string"
    }
  },
  "required": [
    "index"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Show network request details",
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read onlyNon-destructiveOpen world
browser_network_requestsReturns a numbered list of network requests since loading the page. Use browser_network_request with the number to get full details.
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "static": {
      "default": false,
      "description": "Whether to include successful static resources like images, fonts, scripts, etc. Defaults to false.",
      "type": "boolean"
    },
    "filter": {
      "description": "Only return requests whose URL matches this regexp (e.g. \"/api/.*user\").",
      "type": "string"
    },
    "filename": {
      "description": "Filename to save the network requests to. If not provided, requests are returned as text.",
      "type": "string"
    }
  },
  "required": [
    "static"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "List network requests",
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read onlyNon-destructiveOpen world
browser_press_keyPress a key on the keyboard
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Name of the key to press or a character to generate, such as `ArrowLeft` or `a`"
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Press a key",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_resizeResize the browser window
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "width": {
      "type": "number",
      "description": "Width of the browser window"
    },
    "height": {
      "type": "number",
      "description": "Height of the browser window"
    }
  },
  "required": [
    "width",
    "height"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Resize browser window",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_run_code_unsafeRun a Playwright code snippet. Unsafe: executes arbitrary JavaScript in the Playwright server process and is RCE-equivalent.
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "code": {
      "description": "A JavaScript function containing Playwright code to execute. It will be invoked with a single argument, page, which you can use for any page interaction. For example: `async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }`",
      "type": "string"
    },
    "filename": {
      "description": "Load code from the specified file. If both code and filename are provided, code will be ignored.",
      "type": "string"
    }
  },
  "additionalProperties": false
}
Annotations
{
  "title": "Run Playwright code (unsafe)",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_select_optionSelect an option in a dropdown
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "element": {
      "description": "Human-readable element description used to obtain permission to interact with the element",
      "type": "string"
    },
    "target": {
      "type": "string",
      "description": "Exact target element reference from the page snapshot, or a unique element selector"
    },
    "values": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Array of values to select in the dropdown. This can be a single value or multiple values."
    }
  },
  "required": [
    "target",
    "values"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Select option",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_snapshotCapture accessibility snapshot of the current page, this is better than screenshot
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "target": {
      "description": "Exact target element reference from the page snapshot, or a unique element selector",
      "type": "string"
    },
    "filename": {
      "description": "Save snapshot to markdown file instead of returning it in the response.",
      "type": "string"
    },
    "depth": {
      "description": "Limit the depth of the snapshot tree",
      "type": "number"
    },
    "boxes": {
      "description": "Include each element's bounding box as [box=x,y,width,height] in the snapshot. Coordinates are viewport-relative, in CSS pixels (Element.getBoundingClientRect)",
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
Annotations
{
  "title": "Page snapshot",
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read onlyNon-destructiveOpen world
browser_tabsList, create, close, or select a browser tab.
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "action": {
      "type": "string",
      "enum": [
        "list",
        "new",
        "close",
        "select"
      ],
      "description": "Operation to perform"
    },
    "index": {
      "description": "Tab index, used for close/select. If omitted for close, current tab is closed.",
      "type": "number"
    },
    "url": {
      "description": "URL to navigate to in the new tab, used for new.",
      "type": "string"
    }
  },
  "required": [
    "action"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Manage tabs",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_take_screenshotTake a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions.
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "element": {
      "description": "Human-readable element description used to obtain permission to interact with the element",
      "type": "string"
    },
    "target": {
      "description": "Exact target element reference from the page snapshot, or a unique element selector",
      "type": "string"
    },
    "type": {
      "description": "Image format for the screenshot. If unset, inferred from the filename extension, otherwise png.",
      "type": "string",
      "enum": [
        "png",
        "jpeg",
        "webp"
      ]
    },
    "filename": {
      "description": "File name to save the screenshot to. Defaults to `page-{timestamp}.{png|jpeg|webp}` if not specified. Prefer relative file names to stay within the output directory.",
      "type": "string"
    },
    "fullPage": {
      "description": "When true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots.",
      "type": "boolean"
    },
    "scale": {
      "default": "css",
      "description": "Image resolution scale. \"css\" produces a screenshot sized in CSS pixels (smaller, consistent across devices). \"device\" produces a high-resolution screenshot using device pixels (larger, accounts for the device pixel ratio). Default is css.",
      "type": "string",
      "enum": [
        "css",
        "device"
      ]
    }
  },
  "required": [
    "scale"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Take a screenshot",
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read onlyNon-destructiveOpen world
browser_typeType text into editable element
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "element": {
      "description": "Human-readable element description used to obtain permission to interact with the element",
      "type": "string"
    },
    "target": {
      "type": "string",
      "description": "Exact target element reference from the page snapshot, or a unique element selector"
    },
    "text": {
      "type": "string",
      "description": "Text to type into the element"
    },
    "submit": {
      "description": "Whether to submit entered text (press Enter after)",
      "type": "boolean"
    },
    "slowly": {
      "description": "Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once.",
      "type": "boolean"
    }
  },
  "required": [
    "target",
    "text"
  ],
  "additionalProperties": false
}
Annotations
{
  "title": "Type text",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
WritesDestructiveOpen world
browser_wait_forWait for text to appear or disappear or a specified time to pass
Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "time": {
      "description": "The time to wait in seconds",
      "type": "number"
    },
    "text": {
      "description": "The text to wait for",
      "type": "string"
    },
    "textGone": {
      "description": "The text to wait for to disappear",
      "type": "string"
    }
  },
  "additionalProperties": false
}
Annotations
{
  "title": "Wait for",
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read onlyNon-destructiveOpen world

Resources 0

  • None observed.

Resource templates 0

  • None observed.

Prompts 0

  • None observed.

Remote endpoints

EndpointTransportAuthenticationHealthObserved
https://kiro.dev/launch/mcp/addnot_observedHealthyHTTP 301 · 229 msAug 14, 2026

Playwright MCP Server questions

How do I install Playwright MCP Server?

Install the selected package version with: npm install --save-exact @playwright/mcp@0.0.79

What tools does Playwright MCP Server provide?

Playwright MCP Server exposed 24 tools during independent protocol observation, including browser_click, browser_close, browser_console_messages, browser_drag, browser_drop, browser_evaluate, browser_file_upload, browser_fill_form, and others.

Is Playwright MCP Server secure?

Our scanner tested version 0.0.79 without proving a finding in the methods exercised. This is not a guarantee that every deployment is secure.

Company and product intelligence

These internal links are derived from strong identity fields such as the implementation name, package, repository, vendor, and listing name—not generic description prose.

Associated company landscape

Microsoft & Azure intelligence →

Association is based on retained identity fields; it does not by itself prove first-party publication.

Explore related MCP server guides

Curated product and capability guides containing this catalog record.

Browser Automation MCP ServersOfficial vs Community MCP ServersMCP Servers With Completed Verification

Related MCP servers from this publisher

Related records share independently retained publisher or namespace evidence. They are not automatically endorsed alternatives.

Let’s talk about MCP security.

Share your details and our security team will contact you.