Puppeteer MCP
Pricing
Pay per usage
Puppeteer MCP
AI-powered browser automation via Model Context Protocol. Enable Claude, ChatGPT, and other AI assistants to control browsers, scrape data, and automate web tasks through natural language.
Pricing
Pay per usage
AI-powered browser automation via Model Context Protocol. Enable Claude, ChatGPT, and other AI assistants to control browsers, scrape data, and automate web tasks through natural language.
You can access the Puppeteer MCP programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in Integrations settings in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "1.5", "x-build-id": "5akOc1ce4T8lOuhzU" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/meysamazing~puppeteer-mcp/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-meysamazing-puppeteer-mcp", "x-openai-isConsequential": false, "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK" } } } }, "/acts/meysamazing~puppeteer-mcp/runs": { "post": { "operationId": "runs-sync-meysamazing-puppeteer-mcp", "x-openai-isConsequential": false, "summary": "Executes an Actor and returns information about the initiated run in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/runsResponseSchema" } } } } } } }, "/acts/meysamazing~puppeteer-mcp/run-sync": { "post": { "operationId": "run-sync-meysamazing-puppeteer-mcp", "x-openai-isConsequential": false, "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK" } } } } }, "components": { "schemas": { "inputSchema": { "type": "object", "properties": { "alwaysStoreContent": { "title": "Always Store Content", "type": "boolean", "description": "Force all page content to be stored in the Actor's KeyValue Store, regardless of size. Returns a URL to access the stored content.", "default": false }, "alwaysStoreScreenshots": { "title": "Always Store Screenshots", "type": "boolean", "description": "Force all screenshots to be stored in the Actor's KeyValue Store, regardless of size. Returns a URL to access the stored binary image.", "default": false }, "apiKey": { "title": "API Key", "type": "string", "description": "Optional API key for authentication. When set, all requests (except health checks) must include the X-API-Key header with this value. Minimum 8 characters for security." }, "apifyProxyCountryCode": { "title": "Apify Proxy Country Code", "minLength": 2, "maxLength": 2, "type": "string", "description": "Two-letter ISO country code for Apify Proxy (e.g., 'US', 'DE', 'GB'). Requests will be routed through proxies in the specified country. Leave empty for automatic selection." }, "apifyProxyGroups": { "title": "Apify Proxy Groups", "type": "array", "description": "Proxy groups to use with Apify Proxy. Common options: RESIDENTIAL (residential IPs, best for avoiding blocks), DATACENTER (faster, cheaper). Leave empty to use default datacenter proxies. Check your Apify proxy dashboard for available groups.", "items": { "type": "string" }, "default": [] }, "compressionThreshold": { "title": "Compression Threshold (bytes)", "minimum": 0, "type": "integer", "description": "Data larger than this size (in bytes) is automatically compressed with gzip before storing in KeyValue Store. Reduces storage costs and network transfer. Set to 0 to compress all data regardless of size. Lower values cause more aggressive compression.", "default": 102400 }, "contentStorageThreshold": { "title": "Content Storage Threshold (bytes)", "minimum": 0, "type": "integer", "description": "Page content (HTML/text) larger than this size (in bytes) is automatically stored in the Actor's KeyValue Store instead of returned inline. Stored with optional compression. Set to 0 to always return inline.", "default": 512000 }, "defaultTimeout": { "title": "Default Timeout (ms)", "minimum": 1000, "maximum": 300000, "type": "integer", "description": "Default timeout for browser operations in milliseconds. Increase for slow-loading pages.", "default": 30000 }, "enableLogging": { "title": "Enable Logging", "type": "boolean", "description": "Enable detailed logging for debugging. Logs are visible in the Actor run console.", "default": true }, "enableRateLimiting": { "title": "Enable Rate Limiting", "type": "boolean", "description": "Enable rate limiting to protect the server from abuse. When enabled, requests are limited per IP address based on the configured rate.", "default": false }, "headlessMode": { "title": "Headless Mode", "type": "boolean", "description": "Run browser in headless mode (no visible UI). Recommended for production. Disable for debugging.", "default": true }, "idleShutdownMs": { "title": "Idle Shutdown Timeout (ms)", "minimum": 0, "maximum": 3600000, "type": "integer", "description": "Time in milliseconds of inactivity before auto-shutdown. Set to 0 to disable. Helps reduce costs by shutting down when not in use.", "default": 120000 }, "logLevel": { "title": "Log Level", "enum": [ "debug", "info", "warn", "error" ], "type": "string", "description": "Logging verbosity level. Use 'debug' for troubleshooting, 'info' for normal operation, 'warn' or 'error' for minimal output.", "default": "info" }, "maxConcurrency": { "title": "Max Browser Concurrency", "minimum": 1, "maximum": 10, "type": "integer", "description": "Maximum number of concurrent browser instances in the pool. Higher values use more memory but handle more simultaneous requests.", "default": 1 }, "port": { "title": "Server Port", "type": "string", "description": "Port for the MCP server to listen on. This is typically set automatically by Apify.", "default": "8080" }, "proxyUrls": { "title": "Custom Proxy URLs", "type": "array", "description": "List of custom proxy URLs to use instead of Apify Proxy. Currently, all URLs must use the same proxy server (host:port) with different authentication credentials. Format: 'http://user:pass@host:port'. Session-based authentication will rotate through the provided credentials. Cannot be used together with Apify Proxy options.", "items": { "type": "string" }, "default": [] }, "rateLimitRequestsPerMinute": { "title": "Rate Limit (requests/min)", "minimum": 1, "maximum": 10000, "type": "integer", "description": "Maximum number of requests allowed per IP address per minute. Only applies when rate limiting is enabled.", "default": 100 }, "screenshotStorageThreshold": { "title": "Screenshot Storage Threshold (bytes)", "minimum": 0, "type": "integer", "description": "Screenshots larger than this size (in bytes) are automatically stored in the Actor's KeyValue Store instead of returned inline. Stored as binary with optional compression. Set to 0 to always return inline.", "default": 102400 }, "sessionTimeoutMs": { "title": "Session Timeout (ms)", "minimum": 60000, "maximum": 3600000, "type": "integer", "description": "Time in milliseconds before an idle browser session is automatically closed. Sessions are reused across tool calls.", "default": 1800000 }, "useApifyProxy": { "title": "Use Apify Proxy", "type": "boolean", "description": "Enable Apify Proxy for all browser requests. This helps avoid IP blocking and enables access to geo-restricted content. Requires an Apify subscription with proxy access.", "default": false }, "userAgent": { "title": "User Agent", "type": "string", "description": "Browser user agent string. Leave empty for default Chrome user agent. Custom user agents can help avoid bot detection.", "default": "" }, "viewportHeight": { "title": "Viewport Height", "minimum": 240, "maximum": 2160, "type": "integer", "description": "Default browser viewport height in pixels. Affects how pages render and what's visible in screenshots.", "default": 720 }, "viewportWidth": { "title": "Viewport Width", "minimum": 320, "maximum": 3840, "type": "integer", "description": "Default browser viewport width in pixels. Affects how pages render and what's visible in screenshots.", "default": 1280 } } }, "runsResponseSchema": { "type": "object", "properties": { "data": { "type": "object", "properties": { "id": { "type": "string" }, "actId": { "type": "string" }, "userId": { "type": "string" }, "startedAt": { "type": "string", "format": "date-time", "example": "2025-01-08T00:00:00.000Z" }, "finishedAt": { "type": "string", "format": "date-time", "example": "2025-01-08T00:00:00.000Z" }, "status": { "type": "string", "example": "READY" }, "meta": { "type": "object", "properties": { "origin": { "type": "string", "example": "API" }, "userAgent": { "type": "string" } } }, "stats": { "type": "object", "properties": { "inputBodyLen": { "type": "integer", "example": 2000 }, "rebootCount": { "type": "integer", "example": 0 }, "restartCount": { "type": "integer", "example": 0 }, "resurrectCount": { "type": "integer", "example": 0 }, "computeUnits": { "type": "integer", "example": 0 } } }, "options": { "type": "object", "properties": { "build": { "type": "string", "example": "latest" }, "timeoutSecs": { "type": "integer", "example": 300 }, "memoryMbytes": { "type": "integer", "example": 1024 }, "diskMbytes": { "type": "integer", "example": 2048 } } }, "buildId": { "type": "string" }, "defaultKeyValueStoreId": { "type": "string" }, "defaultDatasetId": { "type": "string" }, "defaultRequestQueueId": { "type": "string" }, "buildNumber": { "type": "string", "example": "1.0.0" }, "containerUrl": { "type": "string" }, "usage": { "type": "object", "properties": { "ACTOR_COMPUTE_UNITS": { "type": "integer", "example": 0 }, "DATASET_READS": { "type": "integer", "example": 0 }, "DATASET_WRITES": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_READS": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_WRITES": { "type": "integer", "example": 1 }, "KEY_VALUE_STORE_LISTS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_READS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_WRITES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_INTERNAL_GBYTES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_EXTERNAL_GBYTES": { "type": "integer", "example": 0 }, "PROXY_RESIDENTIAL_TRANSFER_GBYTES": { "type": "integer", "example": 0 }, "PROXY_SERPS": { "type": "integer", "example": 0 } } }, "usageTotalUsd": { "type": "number", "example": 0.00005 }, "usageUsd": { "type": "object", "properties": { "ACTOR_COMPUTE_UNITS": { "type": "integer", "example": 0 }, "DATASET_READS": { "type": "integer", "example": 0 }, "DATASET_WRITES": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_READS": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_WRITES": { "type": "number", "example": 0.00005 }, "KEY_VALUE_STORE_LISTS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_READS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_WRITES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_INTERNAL_GBYTES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_EXTERNAL_GBYTES": { "type": "integer", "example": 0 }, "PROXY_RESIDENTIAL_TRANSFER_GBYTES": { "type": "integer", "example": 0 }, "PROXY_SERPS": { "type": "integer", "example": 0 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Puppeteer MCP from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: