Browser Use MCP server
Endpoint: https://api.browser-use.com/v3/mcp · Authentication: Bearer token
Runs Browser Use cloud browser-agent tasks, polls their status and output, and manages sessions and browser profiles. Requires a Browser Use API key as a bearer token.
How do I authenticate?
Create a scoped provider token and supply it using the credential header and value format documented in the client setup below. Keep credentials out of shared URLs and logs.
Authentication and connection guideConnection specification
- Remote endpoint
https://api.browser-use.com/v3/mcp- Browser access
- Not yet measured
- Declared MCP transport
- Streamable HTTP
- Live-validated MCP transport
- Streamable HTTP — Observed by the latest catalog validation
- Declared authentication
- Bearer token
- Detected authentication
- Bearer token detected or retained from publisher evidence
- Protocol lifecycle
- Stateful MCP · 2024-11-05
- Required header
Authorization— Browser Use API key: Bearer <BROWSER_USE_API_KEY>- Authorization server
https://api.browser-use.com- Category
- Automation
Product documentation · Source repository · Official listing documentation
Provider guidance
- Initialization succeeded without credentials in the 2026-10-20 audit; tool calls require the API key.
More Automation MCP servers · Browse all MCP servers · Test this endpoint in the MCP Playground
Connect it
Live-validated endpoint: https://api.browser-use.com/v3/mcp · Streamable HTTP. Bearer token authentication uses a named environment placeholder.
Agent prompt for Claude Code or Codex
Add the Browser Use MCP server to my MCP client configuration and verify that it works.
What it is: Runs Browser Use cloud browser-agent tasks, polls their status and output, and manages sessions and browser profiles. Requires a Browser Use API key as a bearer token.
Server URL: https://api.browser-use.com/v3/mcp
Transport: Streamable HTTP (remote MCP server, no local install).
Authentication: Bearer token. Bearer token authentication uses a named environment placeholder.
Tools (7, as last observed by mcptest): get_session, get_session_messages, list_browser_profiles, list_sessions, run_session, send_task, stop_session.
Reference: https://mcptest.io/servers/browser-use/
Steps:
1. Work out which MCP client I use (Claude Code, Codex, Cursor, VS Code or another) and add the server under the name "browser-use" in that client's MCP configuration, user scope unless I ask otherwise.
Claude Code: claude mcp add --transport http --scope user --header 'Authorization: Bearer '"${BROWSER_USE_API_KEY}" 'browser-use' 'https://api.browser-use.com/v3/mcp'
Codex: codex mcp add 'browser-use' --url 'https://api.browser-use.com/v3/mcp' --bearer-token-env-var 'BROWSER_USE_API_KEY'
Other clients: use the setup for that client on the reference page.
2. Never write a credential value into a file that could be committed; reference an environment variable or the client's secret store, and ask me for any value you need.
3. Verify: connect to the server and call tools/list. Confirm the tools above are listed, and report any sign-in step I still have to complete.Claude Code setup
Run in a terminal. This user-scoped entry is available across projects.
claude mcp add --transport http --scope user --header 'Authorization: Bearer '"${BROWSER_USE_API_KEY}" 'browser-use' 'https://api.browser-use.com/v3/mcp'- Store BROWSER_USE_API_KEY in your operating system keychain, secret manager, or protected environment; never commit the value. The Authorization header syntax is Bearer <BROWSER_USE_API_KEY>.
Codex CLI setup
Run in a terminal; Codex stores the entry in ~/.codex/config.toml.
codex mcp add 'browser-use' --url 'https://api.browser-use.com/v3/mcp' --bearer-token-env-var 'BROWSER_USE_API_KEY'- Store BROWSER_USE_API_KEY in your operating system keychain, secret manager, or protected environment; never commit the value. The Authorization header syntax is Bearer <BROWSER_USE_API_KEY>.
Cursor setup
Add to .cursor/mcp.json for this project, or ~/.cursor/mcp.json for all projects.
{
"mcpServers": {
"browser-use": {
"url": "https://api.browser-use.com/v3/mcp",
"headers": {
"Authorization": "Bearer ${env:BROWSER_USE_API_KEY}"
}
}
}
}- Store BROWSER_USE_API_KEY in your operating system keychain, secret manager, or protected environment; never commit the value. The Authorization header syntax is Bearer <BROWSER_USE_API_KEY>.
VS Code setup
Add to .vscode/mcp.json, or run “MCP: Open User Configuration” for a private user-level entry.
{
"servers": {
"browser-use": {
"type": "http",
"url": "https://api.browser-use.com/v3/mcp",
"headers": {
"Authorization": "Bearer ${input:browser_use_api_key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "browser_use_api_key",
"description": "BROWSER_USE_API_KEY for Browser Use",
"password": true
}
]
}- VS Code requests BROWSER_USE_API_KEY as a masked input; use a secret manager and do not put a default value in mcp.json. The Authorization syntax remains Bearer <BROWSER_USE_API_KEY>.
Claude setup
Add the endpoint above in Claude:
- Customize > Connectors > Add custom connector
- Team/Enterprise: Organization settings > Connectors > Add > Custom > Web
Claude Desktop setup
Add the endpoint above in Claude Desktop:
- Remote: Customize > Connectors (same as claude.ai)
- Local: Settings > Developer > Edit Config, or Settings > Extensions for .mcpb files
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or%APPDATA%\Claude\claude_desktop_config.json(Windows), local servers only
ChatGPT setup
Add the endpoint above in ChatGPT:
- ChatGPT web: Plugins > Add custom MCP server, then configure authentication and accept the risk warning
Windsurf setup
Add the endpoint above in Windsurf:
~/.config/devin/mcp_config.json(%APPDATA%\devin\mcp_config.jsonon Windows),serverUrlorurl- Cascade panel > ... > MCPs > Open MCP config file
Gemini CLI setup
Add the endpoint above in Gemini CLI:
gemini mcp add --transport http <name> <url>~/.gemini/settings.json(user) or.gemini/settings.json(project),mcpServers
MCP SDK setup
Add the endpoint above in MCP SDK:
- Programmatic:
new Client(...).connect(new StreamableHTTPClientTransport(url))
Notes for every client
- Provider guidance: Initialization succeeded without credentials in the 2026-10-20 audit; tool calls require the API key.
Client compatibility
| Client | Status | Why |
|---|---|---|
| Claude Code | Supported | Claude Code supports Streamable HTTP servers and bearer-token headers. |
| Codex | Supported | Codex supports Streamable HTTP servers and bearer-token headers. |
| Cursor | Supported | Cursor supports Streamable HTTP servers and bearer-token headers. |
| VS Code | Supported | VS Code supports Streamable HTTP servers and bearer-token headers. |
| Claude | Partial | Claude supports bearer-token headers only in limited availability. Request-header authentication is in beta and available to a limited set of organizations. |
| Claude Desktop | Partial | Claude Desktop supports bearer-token headers only in limited availability. Request-header authentication is in beta and available to a limited set of organizations. |
| ChatGPT | Not supported | ChatGPT does not support bearer-token headers. Only the OAuth-issued token is sent; ChatGPT cannot present custom API keys. |
| Windsurf | Supported | Windsurf supports Streamable HTTP servers and bearer-token headers. |
| Gemini CLI | Supported | Gemini CLI supports Streamable HTTP servers and bearer-token headers. |
| MCP SDK | Supported | MCP SDK supports Streamable HTTP servers and bearer-token headers. |
Computed from this server's validated transport, protocol and authentication against documented client support. Checks the catalog has not observed are not counted.
Latest validation evidence
- Validation status
- Online when last tested
- Validation checked at
- Oct 26, 2026 at 11:07 AM
- Validation detail
- Negotiated stateful MCP 2024-11-05 at https://api.browser-use.com/v3/mcp; detected transport streamable-http; authentication bearer-token
Tool inventory
What the catalog validator observed on at https://api.browser-use.com/v3/mcp without credentials. The live server may have changed since; connect in the Playground for the current list.
Tools provided by Browser Use 7
get_sessionNo outputSchemaGet current status and output of a session. Call this repeatedly to poll for task completion. Returns status (created, idle, running, stopped, timed_out, error), step count, output, cost breakdown, and live URL.
Input
session_id: stringsession_id: stringrequiredUUID of the session to check.
get_session_messagesNo outputSchemaGet the agent messages/steps for a session. Shows what the agent is doing including browser actions, reasoning, and results. Use after= parameter for pagination to get new messages since your last check.
Input
after?: string, limit?: integer, session_id: stringafter?: stringoptionalReturn messages after this message ID (cursor-based pagination). Omit for initial fetch.
limit?: integeroptionalMax number of messages to return.
session_id: stringrequiredUUID of the session.
list_browser_profilesNo outputSchemaList all available cloud browser profiles for the authenticated project. Profiles store persistent authentication (cookies, sessions) for websites requiring login. Use this BEFORE attempting any authenticated tasks. Show profiles to the user and let them choose, then pass the selected profile_id to run_session.
Input No parameters
list_sessionsNo outputSchemaList recent sessions for the authenticated project, with status and cost info.
Input
page?: integer, page_size?: integerpage?: integeroptionalPage number (1-indexed).
page_size?: integeroptionalResults per page.
run_sessionNo outputSchemaCreate a new browser agent session and run a task. This uses the v3 sandbox-based agent that supports long-running sessions, workspaces, and keep-alive. After creating a session, call get_session to poll for status and output. For tasks requiring authentication, use list_browser_profiles first to get a profile_id.
Input
keep_alive?: boolean, model?: string, output_schema?: object, profile_id?: string, proxy_country?: any, task: string, workspace_id?: stringkeep_alive?: booleanoptionalIf true, the session stays idle after the task finishes, ready for follow-up tasks via send_task. Default is false (session auto-stops).
model?: stringoptionalAgent model to use. When omitted, an account-appropriate default is selected. Available: gemini-3-flash, claude-sonnet-5, claude-opus-4.6, claude-opus-4.7, claude-opus-4.8, gpt-5.4-mini, glm-5.2, minimax-m3, grok-4.6, glm-5.3-flash, deepseek-v4-flash-vision.
output_schema?: objectoptionalJSON schema for structured output. The agent will return data matching this schema.
profile_id?: stringoptionalUUID of the cloud profile to use for authenticated tasks. Get this from list_browser_profiles.
proxy_country?: anyoptionalISO 3166-1 alpha-2 country code for the proxy location (e.g. "us", "gb", "de", "jp", "br"). Defaults to "us" if not specified. Set to null to disable the proxy.
task: stringrequiredDetailed instructions for what you want the browser agent to do.
workspace_id?: stringoptionalUUID of the workspace for file persistence across sessions.
send_taskNo outputSchemaSend a follow-up task to an existing keep-alive session. The session must be in idle status. Use this for multi-turn interactions where you want to reuse the same browser context.
Input
keep_alive?: boolean, output_schema?: object, session_id: string, task: stringkeep_alive?: booleanoptionalIf true, session stays idle after this task too. Default is false.
output_schema?: objectoptionalJSON schema for structured output.
session_id: stringrequiredUUID of an existing idle session (from run_session with keep_alive=true).
task: stringrequiredThe follow-up task instructions.
stop_sessionNo outputSchemaStop a running session. Use strategy "task" to stop only the current task (session stays idle for follow-ups), or "session" (default) to destroy the sandbox entirely.
Input
session_id: string, strategy?: stringsession_id: stringrequiredUUID of the session to stop.
strategy?: stringoptionalStop strategy: "task" stops the current task only, "session" destroys the sandbox.