Skip to main content
Glama

Browserless MCP Server

MCP Badge

MCP (Model Context Protocol) server for Browserless.io — expose the Browserless smart scraper API to LLM clients like Claude Desktop, Cursor, VS Code, and Windsurf.

Quick Start

Get an API token from browserless.io (free tier available), then point your MCP client at the hosted server:

{
  "mcpServers": {
    "browserless": {
      "url": "https://mcp.browserless.io/mcp?token=your-token-here"
    }
  }
}

No local install — see Configuration for per-client snippets.

Related MCP server: Pinchtab MCP Wrapper

Tools

Tool

Description

browserless_smartscraper

Scrape a single webpage and return its content as markdown or HTML. Handles JavaScript-heavy pages and anti-bot measures automatically. For content across multiple pages, use browserless_crawl; to list a site's URLs, use browserless_map.

browserless_search

Search the web using Browserless and optionally scrape each result. Supports web, news, and image search with geo-targeting and time filters.

browserless_map

Discover and map all URLs on a website. Scans via sitemaps and link extraction. Returns URLs with optional titles and descriptions. Useful for site audits and content discovery.

browserless_crawl

Crawl a website and scrape every discovered page. Supports depth control, path filtering, sitemap strategies, and configurable scrape options. Returns scraped content and metadata for each page.

browserless_performance

Run Lighthouse audits on any URL. Returns scores and metrics for accessibility, best practices, performance, PWA, and SEO. Optionally filter by category or supply performance budgets.

browserless_function

Execute custom Puppeteer JavaScript on the Browserless cloud. The function receives a page object and optional context; return { data, type } to control the payload and Content-Type.

browserless_export

Export a webpage via the Browserless /export API. Fetches the URL and returns its native content (HTML, PDF, image, etc.) with automatic content-type detection.

browserless_agent

Drive a persistent browser session via a ReAct loop: snapshot the page, plan, batch interactions (click, type, scroll, evaluate, etc.), and re-snapshot. Uses ref-based selectors derived from snapshots, supports multi-tab workflows, screenshots, captcha solving, live URLs, and file upload/download (captured downloads auto-surface as handles; bytes never enter context).

browserless_skill

Load an on-demand recipe for a non-trivial page mechanic (shadow DOM, cookie consent, modals, captchas, dynamic content, snapshot misses, screenshots, tabs). Companion to browserless_agent.

browserless_profiles

List the authentication profiles saved for the current token, with cookie and origin counts. Pass a profile's name as profile to another tool to reuse its logged-in state.

browserless_account

Read the account behind the current token: plan, unit balance, billing period, and API key names. Never returns API token values.

browserless_usage

Read request and unit consumption: successes, errors, timeouts, queueing, peak concurrency, captchas, proxy bytes and units. Optionally scoped to specific API keys.

browserless_sessions

Inspect the account's sessions — browsers running now, persistent sessions on dedicated workers, recorded session replays, and 1Password credential integrations. Also downloads a replay as a fully self-contained rrweb player page (action: "replay") that needs no network to render: opened in your browser when the server runs locally, otherwise attached as an inline HTML resource when small enough to send.

browserless_logs

Read Browserless's own record of recent requests: what was attempted, whether it failed, why it stopped, how long it took and what it cost. The tool for diagnosing a run that failed on the Browserless side. Available window is plan-dependent.

Skills

The server ships with a built-in library of Skills — on-demand recipes the agent can load to handle tricky page mechanics. Skills auto-inject into browserless_agent responses when their triggers fire (e.g. the agent hits a cookie banner), and can also be loaded manually via the browserless_skill tool.

Skill

Source

Purpose

shadow-dom

src/skills/shadow-dom.md

Deep selectors and iframe targeting through shadow roots.

cookie-consent

src/skills/cookie-consent.md

Vendor-specific dismiss recipes (OneTrust, Cookiebot, Didomi, TrustArc, etc.).

modals

src/skills/modals.md

Closing dialogs, alertdialogs, and overlay close-button heuristics.

captchas

src/skills/captchas.md

Using the solve command, response semantics, and escalation paths (Cloud only).

dynamic-content

src/skills/dynamic-content.md

Choosing the right wait* method for async/AJAX/SPA content.

snapshot-misses

src/skills/snapshot-misses.md

Handling truncated/empty snapshots and image-rendered content.

screenshots

src/skills/screenshots.md

When to screenshot vs. snapshot, scope and format choices.

tabs

src/skills/tabs.md

Multi-tab workflows and peek-without-switching via targetId.

Load a skill explicitly:

{
  "method": "tools/call",
  "params": {
    "name": "browserless_skill",
    "arguments": { "id": "cookie-consent" },
  },
}

Residential proxy (browserless_agent)

Pass a top-level proxy object on browserless_agent to route the session through residential IPs. Use this when targets IP-block datacenter traffic.

{
  "method": "tools/call",
  "params": {
    "name": "browserless_agent",
    "arguments": {
      "method": "goto",
      "params": { "url": "https://example.com" },
      "proxy": {
        "proxy": "residential",
        "proxyCountry": "us",
        "proxySticky": true,
      },
    },
  },
}

Field

Notes

proxy

"residential" — only value supported today.

proxyCountry

ISO-2 country code ("us", "de"). Auto-normalized to lowercase. Non-letter values are rejected.

proxyState

US state name with whitespace replaced by underscores ("new_york"). Paid-plan gated — non-eligible tokens get a 401.

proxyCity

City target. Paid/enterprise plan gated — non-eligible tokens get a 401.

proxySticky

Stable IP while the underlying WebSocket stays open. Reconnects (idle drop, network blip, browser crash) allocate a new sticky id and new IP.

proxyLocaleMatch

Match navigator locale to the proxy IP country.

proxyPreset

Named preset (e.g. "px_amazon01"). Available presets are plan-dependent — ask Browserless support for your list.

externalProxyServer

Bring-your-own upstream, e.g. http://user:pass@host:port. Must be http:// or https://.

Note: proxyCountry / proxyState / proxyCity / proxySticky / proxyLocaleMatch / proxyPreset require either proxy: "residential" or externalProxyServer to be set. The MCP rejects this combination at validation time; without it, the API would silently ignore them.

The proxy object is read once at session creation. To change it, call close and start a new session — the agent client keys sessions on the proxy fingerprint, so passing a different config will land on a fresh WebSocket.

Configuration

The server is hosted at https://mcp.browserless.io/mcp. Authenticate via headers (preferred) or a ?token= query parameter.

Installing via an AI agent? See install.md for agent-readable setup instructions.

Using headers (recommended for clients that support them):

{
  "mcpServers": {
    "browserless": {
      "url": "https://mcp.browserless.io/mcp",
      "headers": {
        "Authorization": "Bearer your-token-here"
      }
    }
  }
}

Using URL query parameters (for clients like Claude.ai custom connectors that only accept a URL):

https://mcp.browserless.io/mcp?token=your-token-here

To connect to a specific Browserless regional endpoint, add the x-browserless-api-url header or the browserlessUrl query parameter:

{
  "mcpServers": {
    "browserless": {
      "url": "https://mcp.browserless.io/mcp",
      "headers": {
        "Authorization": "Bearer your-token-here",
        "x-browserless-api-url": "https://production-lon.browserless.io"
      }
    }
  }
}
https://mcp.browserless.io/mcp?token=your-token-here&browserlessUrl=https://production-lon.browserless.io

When both headers and query parameters are present, headers take precedence.

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "browserless": {
      "url": "https://mcp.browserless.io/mcp?token=your-token-here"
    }
  }
}

Cursor

Add to your Cursor MCP settings:

{
  "mcpServers": {
    "browserless": {
      "url": "https://mcp.browserless.io/mcp?token=your-token-here"
    }
  }
}

VS Code

Add to your VS Code settings (settings.json):

{
  "mcp": {
    "servers": {
      "browserless": {
        "url": "https://mcp.browserless.io/mcp",
        "headers": {
          "Authorization": "Bearer your-token-here"
        }
      }
    }
  }
}

Windsurf

Add to your Windsurf MCP configuration:

{
  "mcpServers": {
    "browserless": {
      "url": "https://mcp.browserless.io/mcp?token=your-token-here"
    }
  }
}

Self-Hosting

The server can also be run locally — useful for air-gapped deployments or pointing at a self-hosted Browserless instance. Clone this repo and build the Docker image:

docker build -f docker/Dockerfile -t browserless-mcp .

docker run \
  -e BROWSERLESS_TOKEN=your-token \
  -e BROWSERLESS_API_URL=https://your-browserless-instance.example.com \
  -p 8080:8080 \
  browserless-mcp

Then point your MCP client at http://localhost:8080/mcp using the same header/query-parameter auth as above.

Self-hosted environment variables

Variable

Required

Default

Description

BROWSERLESS_TOKEN

Yes

Your Browserless API token

BROWSERLESS_API_URL

No

https://production-sfo.browserless.io

API endpoint (for self-hosted Browserless)

BROWSERLESS_API_SERVER

No

https://api.browserless.io

Account API host — backs browserless_account, _usage, _sessions and _logs. A different host from BROWSERLESS_API_URL, which is a browser runtime

BROWSERLESS_REPLAY_CDN_URL

No

https://d3uycvholi7jx8.cloudfront.net/

Origin serving session-replay artifacts. Replay paths are origin-checked against it

TRANSPORT

No

stdio

Transport type: stdio or httpStream

PORT

No

8080

HTTP server port (only for httpStream transport)

BROWSERLESS_TIMEOUT

No

30000

Request timeout in milliseconds

BROWSERLESS_MAX_RETRIES

No

3

Max retry attempts for failed requests

BROWSERLESS_CACHE_TTL

No

60000

Cache TTL in milliseconds (0 to disable)

AMPLITUDE_API_KEY

No

Amplitude project API key. Sends MCP usage analytics — SDK lifecycle events plus our own tool/skill events

MCP_COMPLIANCE_MODE

No

unset (full surface)

Serve the reduced, directory-compliant surface. Fails closed: any set value except false/0/no/off enables it

MCP Resources

Resource URI

Description

browserless://api-docs

Smart scraper API documentation

browserless://status

Live service health status

MCP Prompts

Prompt

Description

scrape-url

Scrape a webpage and summarize its content

extract-content

Extract specific information from a webpage

Development

npm install
npm run build
npm test
npm run coverage

Tests

The test suite uses Mocha with Chai and Sinon. Specs live alongside the code in test/ (test/lib/, test/tools/, test/prompts/, test/resources/, test/integration/) and run against the compiled output in build/.

  • npm test — compiles TypeScript and runs every *.spec.js under build/test/. No external services or BROWSERLESS_TOKEN are required; the API client is stubbed.

  • npm run coverage — runs the suite under c8 with the thresholds configured in package.json (lines ≥ 80%, branches ≥ 70%, functions ≥ 80%).

Tests run automatically on every pull request via the Test workflow on Node 24. PRs must keep the suite green before they can merge.

API Token

Get your API token at browserless.io. The token authenticates all requests to the Browserless API.

License

SSPL-1.0

Available Tools

14 tools
browserless_accountA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhich part of the account to read. `billing` returns the plan, unit balance and billing period; `keys` lists the account API keys by name.
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds useful behavioral context: it reads data tied to the current API token and never returns API token values. This goes beyond the annotations with a meaningful security-relevant guarantee.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the resource, the exact data available, the supported question types, and an important safety guarantee in just two sentences. Every clause earns its place with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only tool with a full input schema and rich annotations, the description is complete. It tells the agent what data the tool returns, how to select the sub-reading via examples, and that no credentials are exposed, which is sufficient for safe and correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the action enum and _prompt are already well documented. The description adds conceptual mapping between user questions and the action, but does not substantially extend the parameter semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is highly specific: it names the exact resource (Browserless account behind the current API token) and the exact information returned (plan, unit balance, billing period, API key names). It also cites concrete user questions the tool answers, making its purpose unmistakable and easily distinguishable from operation-focused siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use the tool by mapping it to natural-language questions like 'what plan am I on' and 'which keys exist'. It does not explicitly name sibling tools or describe when not to use it, but the context is clear enough for an agent to route to it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_agentA
Destructive

READ CAREFULLY: Execute browser commands in persistent agent session.

Core Loop (ReAct: Reason → Act → Observe)

  1. Plan + check for a site recipe — restate the goal, decide the target host, then browserless_skill { site: "<host>" } (see above). Load and follow any matching recipe before writing your own plan. Never jump straight to goto.

  2. goto — waits "domcontentloaded"

  3. snapshot — returns interactive + informational elements (button, link, textbox, combobox, checkbox, heading, img+alt) with ref= selectors

  4. Plan all actions from snapshot

  5. Batch execute

  6. Re-snapshot only if page changed

  7. Repeat → close when done

Ending the session (REQUIRED)

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.

  • Task complete? Close it. Send { "method": "close" } as its own call, as the last thing you do. This is the default for one-shot work (a lookup, a scrape, a form submit): close without asking.

  • Ask instead of guessing only when follow-up in the SAME browser is genuinely likely (the user said "then...", you're mid-flow on a logged-in site, or the result invites a next step). Say the browser is still open, ask whether to close it, and close it as soon as they're done.

  • Never end your reply with a live session and no mention of it. Either it's closed, or you told the user it's open and why.

Site recipes (site-specific, NOT auto-injected) — CHECK FIRST

Many 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 goto. The moment you know the target host (the user named the site, or you resolved which site to use), call browserless_skill { site: "<host>" } — e.g. { site: "airbnb.com" }. If it lists a recipe matching your task, load it with browserless_skill { id: "<host>/<slug>" } and follow it. Only when there's no match do you plan the steps yourself. Skipping this check on a supported site is a mistake — it's one cheap call. Report the outcome (only if you loaded a site recipe). As your final command in the run, send { method: "reportSkillOutcome", params: { domain: "<host>", task: "<slug>", success: <bool> } } inside commands — where domain/task are the loaded recipe's <host>/<slug> and success is whether the recipe actually got you the result. This refines shared recipes and retires ones that stop working. Send it once, and only when you loaded a recipe — never for a self-planned run. Send it as your last command before any close (close ends the run and anything after it is dropped).

Proxy (optional)

Proxy config is a top-level tool argument (proxy, proxyCountry, etc. on the tool call itself) — it is applied when the session is opened. NEVER call proxy as a method inside commands — a { method: "proxy", ... } JSON-RPC mutation does NOT change the upstream proxy on an already-open session and will silently no-op.

If there is credible evidence the task needs a proxy, you MUST pass proxy options on the very FIRST call (before any goto/snapshot), because the config is read once at session creation. Credible signals include: the user asks for a specific country/region/locale; the target site is known to geo-restrict or block datacenter IPs (streaming, ticketing, retail, banking, real-estate, news paywalls); a prior attempt returned 403/451/captcha/"unusual traffic"/"access denied"; the user explicitly mentions residential / sticky IP / proxy.

If you already opened a session without a proxy and now realize one is needed, you must close and start a new session with the proxy options set — there is no in-session switch.

  • proxy: "residential" — enable routing; proxyCountry: "us" — geo (ISO-2); proxyState / proxyCity (paid plans, 401 otherwise); proxySticky: true — stable IP; proxyLocaleMatch: true — match locale; proxyPreset — named config; externalProxyServer: "http://u:p@host:port" — bring your own (http(s) only)

  • Geo/preset/sticky require proxy: "residential" or externalProxyServer set

Auth

Never log in 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 browserless_skill { id: "autonomous-login" } first, then follow its gates. The skill decides whether login is appropriate and whether credentials are in scope; do not skip it just because no password field is on the page yet.

Terminal-Goal Check

Before 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 autonomous-login), don't return the empty result as the answer. Multi-step preconditions. When the task names multiple steps ("go to X, then Y, report Z"), evaluate preconditions for the full chain before treating any step as optional. A blocker on step N blocks the whole task even if step 1 returned data.

Skills (auto-injected)

SKILL blocks auto-inject between --- SKILL: <id> --- markers when page/error needs special handling. Read carefully. Load manually via browserless_skill if suspected but not injected:

  • autonomous-login — gates, credential rules, MFA/captcha, final JSON shape (see ## Auth above for when to load)

  • shadow-dom — deep selectors, iframe targeting

  • cookie-consent — vendor-specific dismiss recipes

  • modals — closing dialogs and alertdialogs

  • captchas — the solve command (Cloud only)

  • snapshot-misses — truncated/empty snapshots, image-rendered content

  • dynamic-content — choosing the right wait* method

  • screenshots — when to screenshot vs. snapshot, scope and format choices

  • tabs — multi-tab workflows, peek-without-switching

Snapshot Rules

  • Until you snapshot a page, you CANNOT click/type/interact — snapshot first, no exceptions

  • NEVER guess, assume, or infer selectors — CSS selectors from your training data are wrong. ONLY use ref= / deep-ref= from latest snapshot

  • Snapshot STALE after: click, goto, select, navigation

  • Snapshot VALID after: type, hover, scroll, evaluate

  • Expect new content? → re-snapshot

  • Element roles in snapshot (link, button, textbox, combobox, checkbox, heading) tell you what each does

  • Snapshot lines may include desc="...", action=METHOD URL, autocomplete=..., and intent markers (⚠ destructive, ⚠ sign-out, sign-in, reset)

  • Before activating or navigating to a control marked ⚠ destructive or ⚠ sign-out, confirm that the action is actually intended; an unlabeled destructive control is a common trap

  • Snapshots after the first return a diff vs. your previous snapshot: only + new / ~ changed / - removed elements, plus a count of unchanged ones omitted. Unchanged elements stay valid — keep using their refs from the earlier snapshot. If that earlier snapshot is no longer in your context (summarized/trimmed away), request snapshot { full: true } to get the complete element list again.

Selectors

  • Use ref= (CSS) or deep-ref= (starts < ) exactly as shown in snapshot

  • Example: [3] button "Sign In" ref=button#submit"button#submit"

  • deep-ref for shadow DOM / iframes — see shadow-dom skill

Iframes

Snapshots include a Frames list (cross-origin iframes) when present. Elements inside a frame are tagged [frame#N] and carry a deep-ref=< *url* css selector that already pierces the frame — pass it as-is to click/type/hover/checkbox. No frame switching needed. captcha/payment widgets (reCAPTCHA, hCaptcha, Stripe, Turnstile) show up here. shadow-dom skill auto-loads when frames present.

Tabs

Snapshots include tabs + activeTargetId — no getTabs needed. Multi-tab / snapshot { targetId } in tabs skill (auto-loads when >1 tab).

Prefer goto over click for links with href — immune to layout shifts, overlays, misclicks. Example: [5] a "About" ref=a[href='/about']goto { url: "https://ex.com/about" } Only click when href is javascript: / # / missing.

Content Extraction

  1. Check in-memory snapshot (text/values already there)

  2. text { selector } — from specific element

  3. evaluate { content } — JS (IIFE): (() => { return ... })()

  4. html { selector } — raw HTML

Files (upload / download)

To download a file, DRIVE THE BROWSER — do not curl/wget/fetch the file yourself as a first move. Many real downloads (login/cookie-gated, generated server-side on demand, or triggered by a click whose response headers force the download) have NO fetchable URL — a direct fetch silently gets the wrong bytes, an HTML error page, or 403. Click/goto in the agent and collect from the auto-surfaced ledger. The ONLY time a direct fetch is correct: the ledger hands you a URL to use — the single-use /download/<id> URL, or an over-cap sourceUrl. Reaching for curl first is a bug, not a shortcut. NEVER read a file's bytes or base64 into this conversation, and NEVER split/reassemble/inline base64 by hand. That is the wrong tool and will stall.

  • Upload a local file (stdio): uploadFile { selector, files: [{ path }] } — the server reads + encodes it.

  • Upload a local file (HTTP): the server can't read your disk. Stage it once over HTTP, then use the handle: curl -s -F file=@"/path/to/file" "<MCP_BASE_URL>/upload?token=<TOKEN>" → returns { "handle": "browserless-download://…" }uploadFile { files: [{ handle }] }. (The path-rejection error gives you the exact command with your token + URL filled in.)

  • Re-upload something from getDownloads: pass its handle (works in both modes).

  • Download: just trigger it in the agent (click a download link, or goto the file URL). The captured file auto-surfaces as a notification on the agent response (filename/size/handle), never the bytes — the server waits for it to finish (bounded by size), so it usually lands on that same call. stdio: file already saved, you get its path. HTTP: a single-use curl … /download/<id>?token= URL — fetch only if you need it. Files over the cap aren't transferred — you get the source URL to fetch directly. Path/handle reuses in uploadFile. (No separate download tool — use the agent.)

  • base64 content is a LAST RESORT — tiny inline data only.

  • Full recipe: file-transfers skill.

Batching — Maximize Per Call

Plan ALL actions from snapshot before next snapshot.

Process:

  1. Classify actions: safe (type, hover, scroll, evaluate, select, checkbox) vs. page-changing (click, goto)

  2. Batch: safe FIRST → page-changing LAST

  3. For forms: if submit button is in snapshot, batch type + click in one call

  4. Don't batch across navigations

Example form:

{ "commands": [
  { "method": "type", "params": { "selector": "input#email", "text": "j@d.com" } },
  { "method": "click", "params": { "selector": "button#submit" } }
] }

Async

After async triggers (search, submit), use wait* before snapshot — waitForResponse best when API URL known. dynamic-content skill auto-loads on timeout. Never evaluate with setTimeout.

Error Recovery

Errors tagged Category: <NAME>:

  • SELECTOR_MISS — re-snapshot; retry < selector if not already deep-ref

  • SESSION_LOST — a fresh session was opened automatically; re-goto + snapshot (prior state gone)

  • UNAUTHORIZED / FORBIDDEN — pick different path

  • NOT_FOUND — different URL

  • SERVER_ERROR — backoff, retry once

  • NAVIGATION_FAILED — verify URL

  • TIMEOUT — longer wait or different signal

  • INVALID_PARAMS — fix params (schema authoritative)

  • UNKNOWN_METHOD — no such method; pick one from the schema

  • SCRIPT_ERROR — your evaluate script threw; page still alive, fix the script

  • UNKNOWN — re-snapshot + re-plan

! NOTICE: URL changed cross-origin = prior plan/refs invalid, re-plan. Never retry same failed action without re-snapshot.

Methods (non-obvious)

  • goto { url, waitUntil? } — default "domcontentloaded"; prefer over click for links

  • snapshot { maxElements?, targetId? } — cap 500; targetId peeks non-active tab

  • evaluate { content } — IIFE only

  • waitForSelector { selector, timeout? } — set 5000-10000ms

  • waitForResponse { url?, statuses?, timeout? } — url is glob "*api/results*"

  • createTab { url?, activate?, waitUntil? } — default activate: true; false = background

  • close — own call, NOT batched; only when task complete (premature close discards page state)

  • See schema for: screenshot, solve, back, forward, reload, click, type, select, checkbox, hover, scroll, text, html, waitForNavigation, waitForTimeout, waitForRequest, liveURL, getTabs, switchTab, closeTab

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 path straight to uploadFile (files: [{ path: "/abs/file" }]) — the server reads it. Do NOT base64 the file or read its bytes into the conversation. DOWNLOADS are saved to local disk; the agent response gives you the path.

ParametersJSON Schema
NameRequiredDescriptionDefault
proxyNoResidential / external proxy config. Read once at session creation. Changing requires close() + a new session call.
methodNoThe BQL method to execute (used for single-command calls). When using "commands" array, this field is ignored.
paramsNoParameters for the method (used for single-command calls).
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.
profileNoOptional name of an authentication profile to hydrate into the browser when the agent session connects. The profile's cookies, localStorage, and IndexedDB are restored into the session before the request runs. The profile must already exist for the API token in use — create one with Browserless.saveProfile in a live agent session first. `profile` binds each call to its hydrated session — you MUST pass it on every call in a multi-call flow, not just the first. A call that omits `profile` runs in the default, un-hydrated session and will look logged out; if that happens, re-issue the call WITH `profile` before concluding the session expired. A different `profile` value opens a separate session.
commandsNoOptional: batch multiple commands in one call. When provided, "method" and "params" are ignored and commands are executed sequentially. Only the final result is returned. Use this to batch actions that share the same page state (e.g. filling a form: type email + type password + click submit). Do NOT batch across navigations.
rationaleNoA short user-facing reason for this call. HARD BUDGET: 50 characters. Surfaced live in interactive UIs as the progress label. Write it for a human watching, in present-continuous form ("Logging in", "Filling the search form", "Checking the time", "Closing the cookie banner"). If your first draft is longer than 50 chars, REWORD IT to fit — compress to the essence; do NOT just chop. Bad: "Read page title and body text to determine why snapshot is empty" (64). Good: "Diagnosing empty snapshot" (24). Bad: "Filling out a very detailed multi-field signup form" (51). Good: "Filling the signup form" (23). Never use jargon, raw method names ("evaluate", "click"), JS, full URLs, or credentials. Include exactly one per `browserless_agent` call, even when batching commands.
sessionIdNoThe `sessionId` returned by your previous browserless_agent call in this conversation. Echo it back on EVERY subsequent call — it binds this conversation to its live browser and its page state (current URL, cookies, filled forms, open tabs). Omit it only on the first call; omitting it later abandons the current browser and starts a blank one, losing everything the session had done. Only ever pass a value the server returned — never invent one.
createProfileNoOpen this session in profile-creation mode. The MCP tool POSTs /profile with these params, attaches the agent WS to the returned creation session (non-headless, 10-minute keepalive), and expects a saveProfile call before close. Mutually exclusive with `profile`. Load the `auth-profile` skill (via browserless_skill) for the full create-then-save recipe.
integrationIdNoOptional 1Password integration id (e.g. "op_int_…") to bind to the agent session so `loadSecret` can resolve `op://vault/item/field` references. Find it via GET /integrations/onepassword. Bind it on EVERY call in a multi-call flow (like `profile`); a call that omits it runs with no vault bound and `loadSecret` returns CredentialNotResolved. Pair with `allowedDomains` to permit filling on the target sites.
allowedDomainsNoOrigins where a resolved secret may be filled, e.g. ["https://gymshark.com"]. Only meaningful with `integrationId`. Defaults to the integration's configured origins; set it to fill on additional sites. loadSecret is refused on any origin not covered here.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=true) indicate a mutating, side-effecting operation, and the description goes far beyond them: open sessions hold a concurrent browser slot until idle timeout, snapshot staleness and diff semantics, proxy config read once at session creation, premature close discarding page state, never-guess-selectors rules, and empty-state-as-precondition-failure. This is rich behavioral context with specific consequences, exactly what an agent needs. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very long, but the complexity justifies it — this documents 30+ command methods, 11 top-level params, proxy, auth, skills, and file transfers. It is well-structured with numbered steps, clear headers, bold warnings, and concrete examples, front-loading the critical Core Loop and mandatory close rule. Minor redundancy exists (proxy and file-transfer details partly repeat schema text and each other), so it is not maximally tight, but every major section earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool this complex with no output schema, the description is remarkably complete: session lifecycle, batching rules, snapshot validity/staleness, selector rules, iframes, tabs, links, content extraction, upload/download (including runtime-mode-specific stdio guidance), async waits, error recovery categories, and a non-obvious methods list. It also names the companion skill (browserless_skill) for edge cases like shadow-dom and captchas. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds substantial meaning beyond the JSON Schema: sessionId must be echoed on every subsequent call or the browser is abandoned; proxy must be a top-level argument and never a commands method (silent no-op); profile must be passed on every call or the session looks logged out; rationale has a hard 50-char budget with examples. These are behavioral semantics the schema cannot express, and they materially change how parameters are used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: "Execute browser commands in persistent agent session." The Core Loop (plan → skill check → goto → snapshot → batch → close) makes the tool's role unmistakable, and the persistent-session concept clearly distinguishes it from siblings like browserless_smartscraper, browserless_crawl, and browserless_skill. An agent can tell exactly what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Exceptionally explicit about when and how to use the tool: step 0 mandates checking browserless_skill for site recipes before any goto, the closing rules specify when to close vs. ask vs. keep open, proxy guidance gives concrete signals (geo-restriction, 403/captcha) for when proxy args are required, and the auth section tells the agent when to load the autonomous-login skill. It even names the sibling tool (browserless_skill) as the alternative for recipes. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_crawlA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to crawl (must be http or https)
delayNoDelay between requests in milliseconds (default: 200)
limitNoMaximum number of pages to crawl (default: 100)
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.
profileNoOptional name of an authentication profile to hydrate into the browser before each page is scraped. The profile's cookies, localStorage, and IndexedDB are restored into the session before the request runs. The profile must already exist for the API token in use — create one with Browserless.saveProfile in a live agent session first.
sitemapNoSitemap handling: "auto" (default), "force", "skip"auto
timeoutNoHTTP request timeout in milliseconds for API calls (default: 30000)
maxDepthNoMaximum link-follow depth from the root URL (default: 5)
maxRetriesNoNumber of retry attempts per failed page (default: 1)
maxWaitTimeNoMaximum time in ms to wait for crawl completion when waitForCompletion is true (default: 300000 = 5 minutes)
excludePathsNoRegex patterns for URL paths to exclude
includePathsNoRegex patterns for URL paths to include
pollIntervalNoPolling interval in ms when waiting for completion (default: 5000)
scrapeOptionsNoOptions controlling how each page is scraped
allowSubdomainsNoWhether to follow links to subdomains
waitForCompletionNoWhether to wait for crawl completion (default: true). If false, returns immediately with crawl ID.
allowExternalLinksNoWhether to follow links to external domains

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by detailing the return type ('scraped content (markdown/HTML) for each page along with metadata') and key behaviors like depth control and sitemap handling. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences front-load the primary action, add operational details, and conclude with use cases. Every sentence is informative with no redundancy. Ideal conciseness for an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the tool having 17 parameters and a nested object (scrapeOptions), the description only covers a few high-level features (depth, sitemap, filtering, scraping). It omits important context like the async behavior (waitForCompletion), profile authentication, retries, limits, and delays. No output schema exists, so the description should provide more detail on return structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description does not need to repeat parameter details. It adds high-level context by mentioning sitemap, filtering, and scrape options, which reinforces the schema but does not introduce new meaning beyond what the schema already provides. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it crawls a website and scrapes discovered pages, starting from a seed URL with configurable depth. It mentions sitemap discovery, path filtering, subdomain handling, and custom scrape options, effectively distinguishing it from siblings like browserless_search or browserless_agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes the tool is 'useful for comprehensive site analysis, content extraction, and data gathering,' which implies usage context. However, it does not explicitly state when not to use it or provide alternatives among the sibling tools, leaving room for ambiguity in selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_exportA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to export (must be http or https)
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.
profileNoOptional name of an authentication profile to hydrate into the browser before the page is exported. The profile's cookies, localStorage, and IndexedDB are restored into the session before the request runs. The profile must already exist for the API token in use — create one with Browserless.saveProfile in a live agent session first.
timeoutNoRequest timeout in milliseconds
bestAttemptNoWhen true, proceed even if awaited events fail or timeout.
gotoOptionsNoPuppeteer Page.goto() options for navigation
waitForTimeoutNoMilliseconds to wait after page load before exporting
includeResourcesNoWhen true, bundle all linked resources (CSS, JS, images) into a ZIP file.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint, openWorldHint, destructiveHint) indicate safe read operation. Description adds that it uses /export API, auto-detects content type, and can bundle resources with includeResources. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with main purpose, no redundant information. Every sentence contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains return formats (HTML, PDF, image, ZIP) and mentions profile and resource bundling. Missing error behavior or return structure, but adequate for the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%; all parameters have descriptions. The description adds context for includeResources and profile, but adds little beyond what the schema already provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exports a webpage via Browserless /export API, returns native format, and auto-detects content type. It distinguishes from siblings like browserless_crawl and browserless_search by focusing on single-page export.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus siblings. It implies usage for single-page export but does not compare with other Browserless tools or state prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_functionA
Destructive

Execute custom Puppeteer JavaScript code on the Browserless cloud. Your function receives a Puppeteer page object and optional context data. Return { data, type } to control the response payload and Content-Type.

For binary outputs, set type to a real MIME so the bytes come back as a proper content block instead of base64 text:

  • image/png / image/jpeg / image/webp → vision content block (~1.5K tokens)

  • audio/mpeg / audio/wav → audio content block

  • application/pdf and other binaries → resource content block (attachment)

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesJavaScript (ESM) code to execute. The default export receives { page, context } and should return { data, type } where data is the response payload and type is the Content-Type string.
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.
contextNoOptional context object passed to the function as the second argument.
profileNoOptional name of an authentication profile to hydrate into the browser before the function executes. The profile's cookies, localStorage, and IndexedDB are restored into the session before the request runs. The profile must already exist for the API token in use — create one with Browserless.saveProfile in a live agent session first.
timeoutNoRequest timeout in milliseconds

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true and openWorldHint=true, and the description adds context on binary output types, text caps, and return format. It doesn't contradict annotations and adds value beyond them, but could be more explicit about potential side effects or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: starts with main purpose, then details return requirements, binary handling, and text limitations. Every sentence adds value with no redundancy. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description covers execution, return, and constraints well. Missing elements include error handling, behavior on code exceptions, and more details on the profile parameter's lifecycle. Overall, very good but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description significantly enriches understanding by explaining the return format ({ data, type }), binary handling, and text cap, which are not in the schema. This adds substantial context for agent usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes custom Puppeteer JavaScript code, with specific verb 'Execute custom Puppeteer JavaScript code'. It distinguishes itself from sibling tools by emphasizing custom code for complex scraping, form filling, or automation, while siblings like browserless_smartscraper or browserless_search target simpler or specific tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use: 'complex scraping, form filling, or any browser automation that requires custom code.' It also gives return format instructions and text limitations. However, it does not explicitly state when not to use or compare to sibling alternatives, leaving some guidance to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_logsA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoFilter by the target URL of the request.
limitNoMaximum entries to return, 1-100. Defaults to 50.
orderNoTimestamp order. Defaults to newest first.
cursorNoOpaque cursor returned as `nextCursor` by the previous page.
levelsNoSeverity levels to include. Omit for all levels.
reasonNoFilter by the specific failure reason within a category.
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.
endTimeNoExclusive RFC 3339 end time. Defaults to now when omitted.
outcomeNoFilter by request outcome, e.g. `failed` or `succeeded`.
apiKeyIdNoRestrict to one API key, by id. Get ids from browserless_account with action "keys".
categoryNoFilter by failure category, e.g. `browserless_refused`, `browserless_killed`, `target_error`.
endpointNoFilter by endpoint, e.g. `/chromium/bql` or `/screenshot`.
requestIdNoReturn only entries for one request id.
startTimeNoInclusive RFC 3339 start time. Omit to let the account’s plan decide how far back to look — the available window is plan-dependent and the server rejects a range that exceeds it.
eventNamesNoFilter by lifecycle event name, e.g. `request.failed`, `bql.*.failed`.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description agrees by stating 'Read-only.' It adds useful behavioral context beyond the annotations: the plan-dependent retention window, server refusal boundaries, and what data is recorded. This is transparent and does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire tool description is three tight sentences with no fluff. It opens with the primary action and then layers the diagnostic purpose, the plan-window caveat, and the read-only safety hint. This is efficient, well-structured, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even with no output schema, the description tells the agent exactly what the log entries will include and what can be diagnosed. It also covers an important edge case (server may refuse a range and report a limit) and the read-only nature of the tool. Given the richness of the 15-parameter schema, the description supplies the missing non-schema context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 15 parameters are fully documented in the input schema with examples and descriptions, so the schema description coverage is 100%. The tool description itself does not need to add much about the parameters; it simply confirms the purpose and the return fields. This meets the baseline of 3 because the heavy lifting is already done in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') and a specific resource ('Browserless's own record of the account's recent requests'), then lists the record's value: whether it failed, why it stopped, duration, cost. It does not explicitly name sibling tools, but its diagnostic framing ('diagnosing a run that failed on the Browserless side rather than in your own code') differentiates it from the other browserless_* tools. This is slightly below a 5 because sibling differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear when-to-use: it is the tool for diagnosing failures on the Browserless side, not your own code. It also warns that the available time window is plan-dependent and that the server may refuse overlong ranges. It does not explicitly say when to use alternative tools instead, but the guidance is still strong enough to steer an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_mapA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe base URL to start mapping from (must be http or https)
limitNoMaximum number of links to return (default: 100, max: 5000)
searchNoSearch query to order results by relevance
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.
sitemapNoSitemap handling: "include" (default), "skip", "only"include
timeoutNoRequest timeout in milliseconds
includeSubdomainsNoInclude URLs from subdomains (default: true)
ignoreQueryParametersNoExclude URLs with query parameters (default: true)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint. Description adds beyond that by specifying method (sitemaps and link extraction) and that it returns a list of URLs with optional titles/descriptions, which is useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences. The first front-loads the purpose, the second adds features and use cases. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters and no output schema, the description explains the tool's core functionality and use cases but lacks details on output format or behavior under different parameter combinations. It is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds value by explaining the search parameter orders results by relevance to a query, which is not fully clear from the schema alone. Other parameters are adequately described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool discovers and maps all URLs on a website using sitemaps and link extraction. Distinguishes from sibling tools like browserless_crawl (crawling) and browserless_search (searching within pages).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions use cases like site audits and content discovery, and explains the search parameter for relevance ordering. However, it does not explicitly state when not to use this tool or provide alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_performanceA
Read-only

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 or supply performance budgets. Note: audits can take 30s–120s depending on the site.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to audit (must be http or https)
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.
budgetsNoLighthouse performance budgets array. See https://developer.chrome.com/docs/lighthouse/performance/performance-budgets
profileNoOptional name of an authentication profile to hydrate into the browser before the Lighthouse audit runs. The profile's cookies, localStorage, and IndexedDB are restored into the session before the request runs. The profile must already exist for the API token in use — create one with Browserless.saveProfile in a live agent session first.
timeoutNoRequest timeout in milliseconds (audits can take 30s–120s)
categoriesNoLighthouse categories to audit: "accessibility", "best-practices", "performance", "pwa", "seo". Omit for all categories.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond annotations (readOnlyHint, destructiveHint): audits take 30-120 seconds, can filter by category, and support authentication profiles. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and includes key notes about time and optionality without superfluous words. Every sentence is useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description mentions return types (scores and metrics for multiple categories). Combined with parameter details and annotations, it provides complete context for an AI agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the timeout duration (30-120s), the necessity of existing profiles, and the optionality of budgets and categories, which goes beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs a Lighthouse performance audit on any URL and returns scores for accessibility, best practices, performance, PWA, and SEO. This distinguishes it from sibling tools like browserless_crawl or browserless_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context for using the tool (Lighthouse audit) and mentions optional filtering and budgets. It does not explicitly state when not to use it or compare to alternatives, but the purpose is clear enough for an AI agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_profilesA
Read-only

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 profile to other tools. Call this before a task that needs the browser to start signed in, to discover which profiles already exist and pick one by name. Returns each profile name plus cookie/origin counts and last-used time.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of profiles to return (default: 100, max: 1000)
offsetNoNumber of profiles to skip for pagination (default: 0)
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's safety profile is consistent. The description adds valuable behavioral context: profiles are saved logged-in states (cookies+storage) and can be replayed, and the return includes name, cookie/origin counts, and last-used time. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loading the main purpose immediately. Every sentence serves a purpose: stating the action, defining what a profile is and its usage, and noting return fields. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description adequately explains what is returned (profile name, cookie/origin counts, last-used time). It also explains the concept of profiles and how they relate to other tools. For a list tool with pagination parameters, this is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (all three parameters have descriptions). The tool description adds no information about parameters beyond what the schema provides. Per the rubric, when coverage is high, a score of 3 is the baseline. No additional value from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists authentication profiles for the current token, specifying the verb 'list', the exact resource, and the scope. It distinguishes itself by explaining what a profile is (saved browser state) and that profiles are reusable by name in other tools, differentiating it from sibling tools that perform actions like crawling or searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'Call this before a task that needs the browser to start signed in, to discover which profiles already exist and pick one by name.' It provides clear context but does not explicitly mention when not to use or alternative tools; however, no sibling tool serves a similar purpose, so the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_sessionsA
Read-onlyIdempotent

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 replay downloads one recording and returns a fully self-contained playable rrweb page, needing no network to render: display it inline if you can render HTML, otherwise build an artifact from the returned instructions so the user can watch it. Always show the replay — never just summarise it in words.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for `replays` (1-based).
skipNoRows to skip, for paging through `active` or `integrations`.
limitNoMaximum rows to return (max 50). Applies to every action.
actionYesWhich session data to read. `active` = browsers running right now; `persistent` = saved sessions on dedicated workers, running or not; `replays` = list recorded session replays; `replay` = download one replay and render it as a playable rrweb page (needs `sessionId`); `integrations` = 1Password credential integrations.
searchNoFilter `replays` by website or session id.
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.
sessionIdNoWhich replay to download, for action `replay`. Get ids from action `replays`.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description notes it is 'Read-only — it never stops a session', matching the readOnlyHint while also spelling out the safety guarantee. It richly details the replay action's output contract, including that the rrweb page is self-contained, needs no network, and must be shown inline or as an artifact rather than summarized.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded with a clear purpose, then gives exactly the important usage context, and ends with the critical replay display instruction. Every sentence earns its place, and there is no fluff or redundant schema copying.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 parameters, no output schema, and no nested object structure, the description covers the main output and behavior for the key action 'replay', surfaces user-facing intent, and emphasizes the must-do UI behavior. Creators additionally receive 100% parameter schema coverage, keeping a complete enough picture for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all 7 parameters with descriptions, including the action enum and paging fields. These descriptions additionally calls out replay behavior, but it does not add semantic meaning to the individual parameters beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific verb 'Inspect' and explicitly scopes the resource to 'sessions on the Browserless account behind the current API token'. It enumerates four concrete data kinds, which distinguishes it clearly from crawling, exporting, and performance sibling tools even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit use contexts with 'Use it to answer "what is running", "did my session survive", or "what got recorded"', which tells an agent when to select this tool. It does not name alternative sibling tools or describe when not to use this tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_skillA
Read-only

Load a Browserless agent skill on demand, or discover site-specific recipes.

Two uses:

  • { site: "" } — list any site-specific recipes tuned for that host (e.g. { site: "ebay.com" }), returned as pointers. Do this as soon as you know the host you're about to drive; if one matches your task, load it by id. Returns a "no recipe" note when there's none.

  • { id: "" } — load a skill body: an in-house skill id (list below) OR a site recipe id host/slug from a site lookup.

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:

  • shadow-dom — deep selectors, iframe URL-pattern syntax, what works through deep-ref

  • cookie-consent — vendor-specific dismiss recipes (OneTrust, Cookiebot, Didomi, etc.)

  • modals — close-button heuristics, ESC handling, alertdialog vs. dialog

  • snapshot-misses — truncated/empty snapshots, image-rendered content

  • dynamic-content — choosing the right wait* method after async triggers

  • screenshots — when to screenshot vs. snapshot, scope and format choices

  • tabs — multi-tab workflows, peek-without-switching

  • autonomous-login — load before authenticating: when the user asked you to log in, when a wall blocks the task, or as soon as a password input appears. Covers the don't-login-by-default posture, contextual credential matching, MFA/captcha branches, and the required final JSON response shape.

  • captchas — the solve command, response semantics, escalation path (Cloud-only)

  • file-transfersuploadFile / getDownloads, stdio-path vs. base64 content, size caps

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe skill to load: an in-house skill id (see tool description) OR a site recipe id "host/slug" returned by a prior `site` lookup.
siteNoA page host (e.g. "ebay.com"). Lists any site-specific recipes tuned for that host as pointers — then load one with its id.
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's role is lighter. It adds context about returns ('no recipe' note, pointers) and that it loads skill bodies. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with two main uses and bullet points for in-house skills. Front-loaded with key information. Slightly lengthy due to detailed skill list, but each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should explain return values. It mentions 'returned as pointers' and 'load a skill body', but lacks explicit details on response format. Adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. The description adds meaning: explains the difference between id and site parameters, provides examples, and clarifies the _prompt parameter's intended use. This goes beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Load a Browserless agent skill on demand, or discover site-specific recipes.' It distinguishes between two use cases (site and id) and differentiates from sibling tools by focusing on skill loading rather than other browserless actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is provided: 'Use the in-house skills below when you suspect the page exhibits a non-trivial mechanic but no SKILL block was auto-injected.' Also advises to use site lookup 'as soon as you know the host' and lists specific scenarios for each in-house skill, making when-to-use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_smartscraperA
Read-only

Scrape a SINGLE webpage and return its content as markdown or HTML. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to scrape (must be http or https)
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.
formatsNoOutput formats to include: "markdown", "html", "screenshot", "pdf", "links". Defaults to ["markdown"].
profileNoOptional name of an authentication profile to hydrate into the browser before scraping. The profile's cookies, localStorage, and IndexedDB are restored into the session before the request runs. The profile must already exist for the API token in use — create one with Browserless.saveProfile in a live agent session first.
timeoutNoRequest timeout in milliseconds

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only (readOnlyHint: true) and non-destructive (destructiveHint: false). The description adds value by mentioning automatic handling of JavaScript and anti-bot measures. Although it doesn't detail auth profile or timeout behavior, the overall transparency is good.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The first sentence clearly states the core functionality and return types; the second provides important alternatives. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the well-documented schema and annotations, the description is mostly complete. It covers purpose, alternatives, and key behaviors. However, lacking details about return structure (since no output schema) and edge cases slightly reduces completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for all five parameters. The description adds marginal value by mentioning markdown/HTML formats, but the schema already defines formats with defaults. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it scrapes a SINGLE webpage and returns content as markdown or HTML. It explicitly distinguishes from sibling tools 'browserless_crawl' (multiple pages) and 'browserless_map' (list URLs), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use (single page scraping) and when-not-to-use (use crawl for multiple pages, map for listing URLs). It also notes it handles JavaScript-heavy pages and anti-bot measures, guiding proper usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browserless_usageA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
_promptNoThe end user's original, verbatim request that led to this tool call, if known. Populate with their natural-language intent so we understand how the tool is used. Do NOT include secrets, passwords, API keys, tokens, or other credentials. Omit if unavailable.
apiKeyIdsNoRestrict the numbers to specific API keys, by id. Omit for the whole account. Get ids from browserless_account with action "keys".
timeframeNoWindow the usage counts cover: the last hour, day, or week. Defaults to day.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is known. The description adds useful context beyond that by explaining the account-scoped nature, the breadth of metrics, and the billing-oriented purpose, which helps the agent understand what the call exposes and how it is meant to be used.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two focused sentences: one defining scope and returned data, and one providing usage intent and sibling routing. Every sentence earns its place, with no filler, redundancy, or unnecessarily repeated annotation information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with zero required parameters and no output schema, this description is sufficiently complete. It names the resource, the data categories returned, the intended usage questions, and the sibling to use for related but distinct needs, so an agent can confidently select and invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage and clearly documents all three parameters, their defaults, and restrictions. The description does not need to repeat parameter details, so the baseline score of 3 is appropriate; it adds no unique parameter nuance beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as reading request and unit consumption for the Browserless account behind the current API token, and lists the specific metrics returned. It also explicitly differentiates itself from browserless_logs by noting that per-request failure details are handled there, making purpose and boundary unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use the tool, with example user questions like "how much have I used" and "why is my bill high". It also gives a direct exclusion by telling the agent to use browserless_logs instead when per-request failure detail is needed, which is strong alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.2/5.0
Disambiguation4/5

Most tools have clearly distinct purposes (search, map, crawl, single-page scrape, export, performance, profiles). However, browserless_agent and browserless_function are generic and could overlap with the specialized scraping tools, and browserless_export vs browserless_smartscraper may confuse agents for simple page fetches.

Naming Consistency5/5

All tool names follow a consistent 'browserless_' prefix with a lowercase descriptor (skill, function, export, agent, map, search, performance, smartscraper, crawl, profiles). The pattern is uniform and predictable.

Tool Count5/5

10 tools is well-scoped for a browser automation server. Each tool addresses a distinct high-level capability (automation, scraping, search, mapping, performance, profiles, skills), and none feel redundant or unnecessary.

Completeness4/5

The set covers the core browser lifecycle (navigation, interaction, content extraction, file transfer via agent methods) plus specialized features like search, crawl, map, performance, and export. Minor gaps exist: no standalone screenshot/upload tool (though covered by agent methods) and profiles only supports listing, not creating or deleting.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic from any AI client that supports the Model Context Protocol.
    21
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Remote MCP server for web scraping with anti-bot evasion. Provides stealth HTTP fetching, headless browser with Cloudflare bypass, CSS selectors, YouTube transcripts, and Markdown conversion.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/browserless/browserless-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server