@mindstone/mcp-server-browserbase

Cloud browser automation via the Browserbase API: sessions with live-view debugging, AI web agents, persistent contexts, downloads, fetch/search, and serverless functions.
Best for MCP hosts that want a local browser-automation connector covering the entire Browserbase API β from "open a browser and show me" to "run an agent that extracts pricing data".
Status
- Version: 0.1.1 Β· npm
- Auth: API key (
BROWSERBASE_API_KEY)
- Tools: 53 (projects, sessions, contexts, agents, agent runs, downloads, extensions, certificates, fetch/search, functions)
- Surface: cloud-api
- Machine-readable:
STATUS.json
Why this exists
Browserbase's API spans everything from raw CDP sessions to fully-managed AI agents. This package exposes all of it to local stdio MCP hosts as a single connector with deliberate guardrails: session billing is called out in tool descriptions, destructive actions are annotated, external web content is always wrapped as untrusted data, and long-running work is polled (Browserbase has no webhooks).
Example interaction
"Extract the pricing tiers from example.com and give them to me as JSON."
Tools the host calls:
create_agent_run β starts a run with the task and a result_schema for the JSON shape.
wait_for_agent_run β polls until the run completes and returns the structured result.
get_agent_run_messages β (optional) shows what the agent did, step by step.
Response (trimmed):
{
"ok": true,
"runId": "r0a0b0c0-β¦",
"status": "COMPLETED",
"result": { "plans": [ { "name": "β¦", "price": 0 } ] },
"waited_seconds": 47
}
Requirements
One-click install

After clicking the button, your host will prompt you to fill: BROWSERBASE_API_KEY.
Manual config for Claude Desktop / Claude Code / Goose / Continue.dev (Browserbase)
{
"mcpServers": {
"Browserbase": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-browserbase"
],
"env": {
"BROWSERBASE_API_KEY": ""
}
}
}
}
Quick Start
Install & build
cd <path-to-repo>/connectors/browserbase
npm install
npm run build
npx
npx -y @mindstone/mcp-server-browserbase
Local
Configuration
| Variable | Required | Description |
|---|
BROWSERBASE_API_KEY | Yes | Browserbase API key. Get one at browserbase.com/settings |
BROWSERBASE_REQUEST_TIMEOUT_MS | No | Per-request timeout for Browserbase API calls in milliseconds (default 30000) |
MCP_WORKSPACE_PATH | No | Workspace directory for local files uploaded by upload_session_file, upload_extension, and upload_certificate. File reads are sandboxed to this directory; defaults to the system temp directory. |
When running inside a host that provides the credential bridge, configure_browserbase_api_key persists the key through the host instead of the environment.
MCP Host Configuration
{
"mcpServers": {
"browserbase": {
"command": "npx",
"args": ["-y", "@mindstone/mcp-server-browserbase"],
"env": {
"BROWSERBASE_API_KEY": "your-api-key"
}
}
}
}
Security notes
Sessions are billed β release them
Every create_session starts a billable browser (per-minute, 1-minute minimum). The create_session and end_session descriptions tell the agent this explicitly, and end_session should be called as soon as automation finishes. Exceeding the project's concurrency limit returns 429 with a retry-after window that the error resolution surfaces verbatim.
Live-view URLs grant control
get_session returns a credentialed connectUrl and get_session_debug_urls returns debugger/live-view URLs. Anyone with these URLs can watch AND drive the browser β they are for sharing with the session's owner, never publicly.
External content is always enveloped
Anything authored outside your account β fetched page content, search results, page titles in debug URLs, agent run tasks/results/messages, CDP log bodies, replay playlists, download filenames, function output, error details β is wrapped in <untrusted-content source="browserbase:β¦"> envelopes with close-tag breakout escaping before it reaches the model. CDP log rawBody values are additionally truncated beyond ~4KB with a truncation note.
File uploads are workspace-sandboxed
upload_session_file, upload_extension, and upload_certificate accept local file_paths. Reads are constrained to MCP_WORKSPACE_PATH (or the system temp directory when unset) using canonical-prefix containment: .. traversal, absolute paths outside the sandbox, and symlinks that escape it are rejected before any disk read. The read is open-then-validate: the connector opens a descriptor, confirms the opened inode is the file the sandbox approved, reads through that descriptor, and re-checks it after the read β a file swapped or modified mid-read fails closed.
fetch_url cannot probe internal networks
fetch_url (and the URLs embedded in search results you might fetch next) are guarded by a public-URL check: only http:///https:// schemes, and localhost, loopback, link-local, and private IP ranges are rejected before any request is sent.
delete_context, delete_agent, delete_download, delete_extension, delete_certificate, end_session, stop_agent_run, invoke_function, and all create_*/upload_* tools carry destructiveHint: true. Deletes are permanent; hosts should require explicit user confirmation.
Configuration
- configure_browserbase_api_key β Save your Browserbase API key (host-persisted when a bridge is present)
Projects
- list_projects β List projects (IDs, concurrency limits, default timeouts)
- get_project β Get one project's details
- get_project_usage β Browser minutes and proxy bytes consumed
Sessions
- create_session β Create a cloud browser session (billed per minute; returns connectUrl)
- list_sessions β List sessions, filtered by status or userMetadata query
- get_session β Get a session's status and connectUrl
- end_session β Release a session (REQUEST_RELEASE semantics; sessions also auto-expire)
- get_session_debug_urls β Live-view + debugger URLs to share with a human
- get_session_logs β CDP-level session logs (raw bodies truncated beyond ~4KB)
- get_session_replays β List recorded pages available for replay
- get_session_replay_playlist β Fetch a page's m3u8 replay playlist
- request_session_recording_downloads β Request async MP4 assembly (HTTP 202)
- get_session_recording_downloads β Poll MP4 status; get short-lived signed URLs
- upload_session_file β Upload a sandboxed local file to /tmp/.uploads/ in the session
Contexts (persistent browser state)
- create_context β Create a context for persisting cookies/storage across sessions
- get_context β Get a context's details
- delete_context β Permanently delete a context
Agents
- create_agent β Create a reusable agent (name, system prompt, result schema)
- list_agents β List agents (cursor-paginated, date-filterable)
- get_agent β Get an agent's prompt and result schema
- update_agent β Partially update an agent
- delete_agent β Delete an agent (existing runs unaffected)
Agent Runs
- create_agent_run β Start a run (ad-hoc or with an agent; %variable% substitution for sensitive values)
- list_agent_runs β List runs (cursor-paginated, filterable)
- get_agent_run β Get a run's status and terminal result/cause
- wait_for_agent_run β Recommended: poll until terminal and return the result
- get_agent_run_messages β The run's UIMessage conversation (since/nextSince feed)
- stop_agent_run β Stop a running run (202; 409 if already terminal)
Downloads (files downloaded inside sessions)
- list_downloads β List downloads for a session (offset-paginated, filterable)
- get_download_info β Metadata (size, checksum, MIME type)
- get_download_file β Fetch the bytes as base64 (8MB inline cap)
- delete_download β Permanently delete a download
Extensions
- upload_extension β Upload a zipped Chrome extension (sandboxed file read)
- get_extension β Get an uploaded extension
- delete_extension β Permanently delete an extension
Certificates
- upload_certificate β Upload a CA certificate for TLS-inspecting proxies
- list_certificates β List uploaded certificates
- get_certificate β Get a certificate
- delete_certificate β Permanently delete a certificate
Fetch & Search
- fetch_url β Server-side fetch: raw body, markdown, or schema-driven JSON
- web_search β Web search with ranked results
Functions (serverless browser automations β list/invoke/inspect only)
- list_functions β List deployed functions
- get_function β Get a function
- invoke_function β Invoke a function (async 202; poll the invocation)
- list_function_versions β List a function's versions
- get_function_version β Get a version's userParamsSchema (check before invoking)
- list_function_invocations β List a version's invocations
- get_function_invocation β Get an invocation's status, results, and cause
- get_function_invocation_logs β An invocation's logs
- list_function_builds β List function builds
- get_function_build β Get a build's status and failure cause
- get_function_build_logs β A build's logs
API coverage notes
- Deprecated upstream:
GET /sessions/{id}/recording (rrweb event dump) is deprecated by Browserbase and returns a deprecation 404 β it is deliberately not exposed. Use get_session_replays / get_session_replay_playlist (watchable) or the recording-download tools (MP4 files) instead.
- No webhooks: Browserbase is poll-based. Agent runs (
wait_for_agent_run / get_agent_run), recording downloads (get_session_recording_downloads), and function invocations (get_function_invocation) are all polled.
- No list endpoints for contexts or extensions β record the IDs returned at creation.
- Functions are deploy-only via the Browserbase CLI β this connector lists, inspects, and invokes existing functions; it cannot create them.
Error handling
All upstream errors are returned as structured JSON with ok: false, a semantic code (AUTH_REQUIRED, VALIDATION_FAILED, NOT_FOUND, CONFLICT, GONE, RATE_LIMITED, PAYMENT_REQUIRED, UPSTREAM_ERROR, TIMEOUT, β¦), and an actionable resolution. Rate-limit errors include the server-provided retry-after window. Upstream error text is enveloped as untrusted content, and the API key never appears in any output.
Licence
FSL-1.1-MIT β Functional Source License, Version 1.1, with MIT future licence. The software converts to MIT licence on 2030-04-08.