browserless-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP server port (only for httpStream transport) | 8080 |
| TRANSPORT | No | Transport type: stdio or httpStream | stdio |
| BROWSERLESS_TOKEN | Yes | Your Browserless API token | |
| BROWSERLESS_API_URL | No | API endpoint (for self-hosted Browserless) | https://production-sfo.browserless.io |
| BROWSERLESS_TIMEOUT | No | Request timeout in milliseconds | 30000 |
| BROWSERLESS_CACHE_TTL | No | Cache TTL in milliseconds (0 to disable) | 60000 |
| BROWSERLESS_MAX_RETRIES | No | Max retry attempts for failed requests | 3 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": true,
"listChanged": true
} |
| completions | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| browserless_showA | Display a prepared Browserless replay, screenshot gallery, video, or human handoff inline. Pass the exact viewRef returned by its producer tool. Never repeats browser actions, downloads, or creates another handoff. |
| browserless_view_dataA | Widget-only reader for a prepared replay. Not a rendering tool. Use the original viewRef and opaque cursor; never fetch replay data into the conversation. |
| browserless_exportA | Export a webpage from a URL via the Browserless /export API. Fetches the URL and returns its content in the native format (HTML, PDF, image, etc.). Automatically detects the content type. Set includeResources=true to bundle all page assets (CSS, JS, images) into a ZIP archive for offline use. |
| browserless_skillA | Load a Browserless agent skill on demand, or discover site-specific recipes. Two uses:
Use the in-house skills below when you suspect the page exhibits a non-trivial mechanic but no SKILL block was auto-injected. The auto-injection heuristics are conservative; calling this tool is the explicit fallback. Available in-house skills:
|
| browserless_agentA | READ CAREFULLY: Execute browser commands in an agent session. Core Loop (ReAct: Reason → Act → Observe)
Ending the session (REQUIRED)One-shot vs. multi-step (session lifetime). Sessions are one-shot by default: when your
When a step requires human input or you cannot safely proceed without help, stop browser actions and preserve that session. Use an available human-handoff capability to show the browser with specific instructions, then ask the person to finish the step and reply. Never ask them to paste passwords or verification codes into chat. Wait for confirmed completion before taking a fresh snapshot and continuing in the same browser; do not open a replacement or assume that opening a viewer completed the step. An open session holds one of the account's concurrent browsers until it idles out — leaving it open is not free, and stacking them starves the next task.
Report the outcome (only if you loaded a site recipe). Near the end of the run, send
Site recipes (site-specific, NOT auto-injected) — CHECK FIRSTMany specific sites (marketplaces, gov portals, travel, real-estate, etc.) have a tuned recipe for a given task — proven selectors, API shortcuts, proxy needs, and known gotchas that a from-scratch plan will miss. These are not auto-injected; you must ask for them, and a recipe overrides any plan you'd build yourself (including "just use a prefiltered URL + evaluate").
This is step 0 of every task — do it before your first Proxy (optional)Proxy config is a top-level If there is credible evidence the task needs a proxy, you MUST pass proxy options on the very FIRST call (before any If you already opened a session without a proxy and now realize one is needed, you must
OS persona (optional)The top-level Reach for AuthFor an existing-profile session, set Never log in or register by default. Never invent or assume credentials exist (no "test credentials", no "your account"). If the snapshot contains a sign-in link OR you're about to mention "sign in" / "log in" / "auth required" — even as a suggested option to the user — call After a Saved-login check (only when the session was opened with Pass Terminal-Goal CheckBefore declaring done, restate the user's terminal deliverable in one line and verify your evidence directly supports it — not a sibling question.
Empty-state substitution. An empty/zero/null result from a resource that normally requires auth, scope, or filter context is evidence the precondition wasn't met — not evidence the question is answered. Empty cart while logged out, zero results while geo-restricted, empty inbox while unauthenticated: precondition failure → fix the precondition (often: load Skills (auto-injected)SKILL blocks auto-inject between
Snapshot Rules
Selectors
IframesSnapshots include a TabsSnapshots include LinksPrefer goto over click for links with href — immune to layout shifts, overlays, misclicks.
Example: Content Extraction
Files (upload / download)To download a file, DRIVE THE BROWSER — do not
Batching — Maximize Per CallPlan ALL actions from snapshot before next snapshot. Process:
Example form: AsyncAfter async triggers (search, submit), use Error RecoveryErrors tagged
Methods (non-obvious)
Runtime: LOCAL (stdio)Before any file transfer, know your mode: this server runs over stdio, on the same machine as your files. To UPLOAD a local file, pass its Repetition self-checkWhen a tool response contains REPETITION WARNING, re-read your plan and compare your completed steps with the intended progress. Do not repeat the same batch blindly: choose a materially different approach within the task's constraints, or stop and report what is blocked and what you tried. Repetition is a signal to check progress, not proof of failure; continue a repeated action only when you can identify concrete progress or a task-required reason. |
| browserless_performanceA | Run a Lighthouse performance audit on any URL via the Browserless /performance API. Returns scores and metrics for accessibility, best practices, performance, PWA, and SEO. Optionally filter by category, emulate a mobile or desktop device, supply a custom Lighthouse config, or supply performance budgets. Returns category scores and available Lighthouse lab metrics inline: FCP, LCP, TBT, CLS, Speed Index, initial server response time, and total transfer size. Use these metrics to answer page-speed questions without writing timing scripts. INP is not measured by this navigation audit; TBT is a responsiveness proxy. Saves the full JSON report outside the conversation. Use the local path (stdio) or download URL (HTTP) to inspect only the audits you need. Note: audits can take 30s–120s depending on the site. |
| browserless_accountA | Read the Browserless account behind the current API token: plan, unit balance, billing period, and the names of the account API keys. Use it to answer "what plan am I on", "how many units are left", or "which keys exist". Read-only, and never returns API token values. |
| browserless_usageA | Read request and unit consumption for the Browserless account behind the current API token: successes, errors, timeouts, queueing, peak concurrency, captchas, proxy bytes and units. Use it to answer "how much have I used" or "why is my bill high". For per-request detail on failures, use browserless_logs instead. Read-only. |
| browserless_sessionsA | Inspect the sessions on the Browserless account behind the current API token: browsers running right now, persistent sessions saved on dedicated workers, recorded session replays, and 1Password credential integrations. Use it to answer "what is running", "did my session survive", or "what got recorded". Read-only — it never stops a session. Action |
| browserless_logsA | Read Browserless's own record of the account's recent requests: what was attempted, whether it failed, why it stopped, how long it took and what it cost. This is the tool for diagnosing a run that failed on the Browserless side rather than in your own code. The window available depends on the account plan; the server reports the limit if a range is refused. Read-only. |
| browserless_smartscraperA | Scrape a SINGLE webpage and return HTML, markdown, raw DOM text, links, screenshots, or PDFs plus page metadata. Handles JavaScript-heavy pages and anti-bot measures automatically. For content across MULTIPLE pages of a site, use browserless_crawl; to list a site's URLs, use browserless_map. |
| browserless_functionA | Execute custom Puppeteer JavaScript code on the Browserless cloud. Your function receives a Puppeteer For binary outputs, set
Text responses are capped at 200,000 characters (~50K tokens). Larger text payloads will be rejected — filter or summarize inside your function, or switch to a binary type if you actually meant to return bytes. Useful for complex scraping, form filling, or any browser automation that requires custom code. |
| browserless_mapA | Discover and map all URLs on a website using Browserless. Scans a site via sitemaps and link extraction to find all pages. Returns a list of URLs with optional titles and descriptions. Use the search parameter to order results by relevance to a query. Useful for site audits, content discovery, and building site maps. |
| browserless_crawlA | Crawl a website and scrape every discovered page using Browserless. Starts from a seed URL and follows links up to a configurable depth. Supports sitemap discovery, path filtering, subdomain handling, and custom scrape options. Returns scraped content (markdown/HTML) for each page along with metadata. Useful for comprehensive site analysis, content extraction, and data gathering. |
| browserless_live_urlA | Create, inspect, or close a live viewer link for an existing browser through REST, without an agent connection. Create options default on the server: view-only, jpeg, quality 70, not resizable, browser interface shown. Link lifetime defaults to 15 minutes, capped by remaining browser session time; creating a link does not keep the browser alive. For a human handoff, pass instructions explaining what to do and when to click Done. Instructions accept a string or an object with layout, format, title, summary, steps, and currentStep. For string instructions use instructionsTitle, steps, currentStep, and instructionsFormat beside instructions. doneLabel, failLabel, and requesterName are always top-level options. Status returns status, reason, interactable, viewerCount, and expiresAt (epoch ms). Ended links remain inspectable until their browser closes; closing an ended link returns not found. |
| browserless_profilesA | List the authentication profiles saved for the current token. A profile is a saved logged-in browser state (cookies + storage) that can be replayed by passing its name as |
| browserless_searchA | Search the web using Browserless and optionally scrape each result. Performs web searches via SearXNG and can return results from web, news, or images. Optionally scrape each result URL to get markdown, HTML, links, or screenshots. Useful for research, gathering information, and finding relevant web pages. |
| browserless_link_connectA | Manage the Browserless Stripe Link wallet. Use action "status" to check availability; it never returns a URL. Use "connect" to mint a Stripe-owned authorization URL to give the user, or "disconnect" to remove the connection. When "status" is not_connected, call "connect" to obtain that URL — the status instruction alone has no link. Never ask the user for raw card details. |
| browserless_link_checkoutA | Create, resume, cancel, or report a Stripe Link checkout in the exact active browser session. Create requires the latest browserless_agent sessionId. Pass payment-field deep selectors whenever a card form is shown, including Stripe-hosted checkout; omit them only for a pure Link Pay Token handoff. Resume retrieves and fills only after Link approval; payment credentials never reach this tool. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| scrape-url | Scrape a webpage and return its content as markdown with metadata |
| extract-content | Extract specific information from a webpage using the smart scraper |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Browserless views | |
| Browserless view (v1 compatibility) | |
| Browserless view (v2 compatibility) | |
| Browserless view (v3 compatibility) | |
| Browserless view (v4 compatibility) | |
| Browserless view (v5 compatibility) | |
| Browserless view (v6 compatibility) | |
| Browserless view (v7 compatibility) | |
| Browserless view (v8 compatibility) | |
| Browserless Lighthouse scorecard | |
| Browserless Service Status | |
| Browserless API Documentation |
TDQS
Scored across 19 tools
Most tools map to clearly distinct Browserless capabilities, and descriptions sharply separate adjacent tools such as browserless_agent versus browserless_function. There is still meaningful conceptual overlap among browserless_smartscraper, browserless_export, browserless_crawl, and browserless_map, plus display/handoff tools like browserless_show, browserless_view_data, and browserless_live_url.
All tool names use the same browserless_ prefix and snake_case style, making the set easy to scan and predict. The suffixes mix verbs, nouns, and compound concepts, so the naming is consistent in format but not a strict verb_noun convention throughout.
At 19 tools, the set is on the heavy side for an agent-facing interface and includes several admin/observability tools alongside many scraping and automation entry points. Each tool has a distinct purpose, but the surface feels broad enough that some grouping or consolidation would improve usability.
The server covers a wide lifecycle: browser automation, scraping, crawling, mapping, search, export, performance auditing, sessions, profiles, account usage, logs, and Stripe Link flows. Minor gaps remain, such as profiles being list-only with no explicit create/delete tool and sessions being read-only with no direct stop operation.