openapi.json•20.5 kB
{
"openapi": "3.0.3",
"info": {
"title": "MCP Playwright Browser Automation API",
"description": "Enhanced Playwright Tools for Model Context Protocol (MCP) with CDP Support. Provides browser automation capabilities including navigation, interaction, extraction, and testing.",
"version": "0.0.34",
"contact": {
"name": "Gaston Zarate",
"email": "gaston@macaco.ai",
"url": "https://github.com/macacoai/mcp-playwright"
},
"license": {
"name": "MIT",
"url": "https://opensource.org/licenses/MIT"
}
},
"servers": [
{
"url": "https://macaco.ai",
"description": "Qa Playwright Server"
},
{
"url": "http://localhost:8931",
"description": "Local Development Server"
}
],
"paths": {
"/mcp/browser_navigate": {
"post": {
"summary": "Navigate to URL",
"description": "Navigate to a URL",
"operationId": "browser_navigate",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL to navigate to"
}
},
"required": ["url"]
}
}
}
},
"responses": {
"200": {
"description": "Navigation successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_snapshot": {
"post": {
"summary": "Page snapshot",
"description": "Capture accessibility snapshot of the current page, this is better than screenshot",
"operationId": "browser_snapshot",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
}
},
"responses": {
"200": {
"description": "Snapshot captured successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_click": {
"post": {
"summary": "Click",
"description": "Perform click on a web page",
"operationId": "browser_click",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"element": {
"type": "string",
"description": "Human-readable element description used to obtain permission to interact with the element"
},
"ref": {
"type": "string",
"description": "Exact target element reference from the page snapshot"
},
"doubleClick": {
"type": "boolean",
"description": "Whether to perform a double click instead of a single click"
},
"button": {
"type": "string",
"enum": ["left", "right", "middle"],
"description": "Button to click, defaults to left"
}
},
"required": ["element", "ref"]
}
}
}
},
"responses": {
"200": {
"description": "Click performed successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_type": {
"post": {
"summary": "Type text",
"description": "Type text into editable element",
"operationId": "browser_type",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"element": {
"type": "string",
"description": "Human-readable element description used to obtain permission to interact with the element"
},
"ref": {
"type": "string",
"description": "Exact target element reference from the page snapshot"
},
"text": {
"type": "string",
"description": "Text to type into the element"
},
"slowly": {
"type": "boolean",
"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."
},
"submit": {
"type": "boolean",
"description": "Whether to submit entered text (press Enter after)"
}
},
"required": ["element", "ref", "text"]
}
}
}
},
"responses": {
"200": {
"description": "Text typed successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_press_key": {
"post": {
"summary": "Press key",
"description": "Press a key on the keyboard",
"operationId": "browser_press_key",
"requestBody": {
"required": true,
"content": {
"application/json": {
"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"]
}
}
}
},
"responses": {
"200": {
"description": "Key pressed successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_select_option": {
"post": {
"summary": "Select option",
"description": "Select an option in a dropdown",
"operationId": "browser_select_option",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"element": {
"type": "string",
"description": "Human-readable element description used to obtain permission to interact with the element"
},
"ref": {
"type": "string",
"description": "Exact target element reference from the page snapshot"
},
"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": ["element", "ref", "values"]
}
}
}
},
"responses": {
"200": {
"description": "Option selected successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_wait_for": {
"post": {
"summary": "Wait for condition",
"description": "Wait for text to appear or disappear or a specified time to pass",
"operationId": "browser_wait_for",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "The text to wait for"
},
"textGone": {
"type": "string",
"description": "The text to wait for to disappear"
},
"time": {
"type": "number",
"description": "The time to wait in seconds"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Wait condition met",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_take_screenshot": {
"post": {
"summary": "Take screenshot",
"description": "Take a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions.",
"operationId": "browser_take_screenshot",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"element": {
"type": "string",
"description": "Human-readable element description used to obtain permission to screenshot the element. If not provided, the screenshot will be taken of viewport. If element is provided, ref must be provided too."
},
"ref": {
"type": "string",
"description": "Exact target element reference from the page snapshot. If not provided, the screenshot will be taken of viewport. If ref is provided, element must be provided too."
},
"filename": {
"type": "string",
"description": "File name to save the screenshot to. Defaults to `page-{timestamp}.{png|jpeg}` if not specified."
},
"fullPage": {
"type": "boolean",
"description": "When true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots."
},
"raw": {
"type": "boolean",
"description": "Whether to return without compression (in PNG format). Default is false, which returns a JPEG image."
}
}
}
}
}
},
"responses": {
"200": {
"description": "Screenshot taken successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_get_text": {
"post": {
"summary": "Get text content",
"description": "Get text content or attribute value from a specific element on the page",
"operationId": "browser_get_text",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"element": {
"type": "string",
"description": "Human-readable element description used to obtain permission to interact with the element"
},
"ref": {
"type": "string",
"description": "Exact target element reference from the page snapshot"
},
"attribute": {
"type": "string",
"description": "Optional attribute to get instead of text content (e.g., \"href\", \"src\", \"value\")"
}
},
"required": ["element", "ref"]
}
}
}
},
"responses": {
"200": {
"description": "Text content retrieved successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_console_messages": {
"post": {
"summary": "Get console messages",
"description": "Returns all console messages",
"operationId": "browser_console_messages",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
}
},
"responses": {
"200": {
"description": "Console messages retrieved successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_network_requests": {
"post": {
"summary": "List network requests",
"description": "Returns all network requests since loading the page",
"operationId": "browser_network_requests",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
}
},
"responses": {
"200": {
"description": "Network requests retrieved successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_tab_list": {
"post": {
"summary": "List tabs",
"description": "List browser tabs",
"operationId": "browser_tab_list",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
}
},
"responses": {
"200": {
"description": "Tabs listed successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_tab_new": {
"post": {
"summary": "Open new tab",
"description": "Open a new tab",
"operationId": "browser_tab_new",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL to navigate to in the new tab. If not provided, the new tab will be blank."
}
}
}
}
}
},
"responses": {
"200": {
"description": "New tab opened successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_tab_close": {
"post": {
"summary": "Close tab",
"description": "Close a tab",
"operationId": "browser_tab_close",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"index": {
"type": "number",
"description": "The index of the tab to close. Closes current tab if not provided."
}
}
}
}
}
},
"responses": {
"200": {
"description": "Tab closed successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
},
"/mcp/browser_tab_select": {
"post": {
"summary": "Select tab",
"description": "Select a tab by index",
"operationId": "browser_tab_select",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"index": {
"type": "number",
"description": "The index of the tab to select"
}
},
"required": ["index"]
}
}
}
},
"responses": {
"200": {
"description": "Tab selected successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ToolResponse"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"ToolResponse": {
"type": "object",
"properties": {
"content": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/TextContent"
},
{
"$ref": "#/components/schemas/ImageContent"
}
]
},
"description": "The response content"
},
"isError": {
"type": "boolean",
"description": "Whether this is an error response"
}
},
"required": ["content"]
},
"TextContent": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["text"]
},
"text": {
"type": "string"
}
},
"required": ["type", "text"]
},
"ImageContent": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["image"]
},
"data": {
"type": "string",
"description": "Base64 encoded image data"
},
"mimeType": {
"type": "string",
"description": "MIME type of the image"
}
},
"required": ["type", "data", "mimeType"]
}
},
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer"
}
}
},
"security": [
{
"bearerAuth": []
}
]
}