Hyperbrowser MCP Server
OFFICIAL SERVERScrape, crawl, search and run browser agents through Hyperbrowser's cloud browsers
Runs web tasks by replaying a site's own backend API calls, with a recorded cloud browser as fallback
By Unbrowse JavaScript Remote (hosted) · Streamable HTTPLocal · stdio Browser automation
50 popularity score ★ 908 ↓ 295/wk
Opens the app, which asks before it adds the server.
claude mcp add --transport http unbrowse https://unbrowse.ai/mcpcodex mcp add unbrowse --url https://unbrowse.ai/mcp && codex mcp login unbrowsehttps://unbrowse.ai/mcphttps://unbrowse.ai/mcpgemini extensions install https://github.com/unbrowse-ai/unbrowseOpens the app, which asks before it adds the server.
npx -y unbrowse loginclaude mcp add unbrowse -- npx -y unbrowse mcp{
"mcpServers": {
"unbrowse": {
"command": "npx",
"args": [
"-y",
"unbrowse",
"mcp"
]
}
}
}{
"mcpServers": {
"unbrowse": {
"command": "npx",
"args": [
"-y",
"unbrowse",
"mcp"
]
}
}
}{
"servers": {
"unbrowse": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"unbrowse",
"mcp"
]
}
}
}[mcp_servers.unbrowse]
command = "npx"
args = ["-y", "unbrowse", "mcp"]gemini mcp add --scope user unbrowse npx -- -y unbrowse mcpUNBROWSE_API_KEY secret |
Optional: API key (ub_live_…) from unbrowse.ai/app. Needed unless you signed in with `npx unbrowse login`, and wins over a stored sign-in. |
|---|---|
UNBROWSE_EGRESS |
Optional: Set to client to send the proxy's unbrowse_run site requests from this machine (same as --from-here). Unset, they go from Unbrowse. |
UNBROWSE_MCP_URL |
Optional: Hosted MCP address the proxy forwards to (same as --url). |
UNBROWSE_BASE_URL |
Optional: Unbrowse origin for sign-in and the REST API. |
UNBROWSE_END_USER |
Optional: End-user id sent as X-Unbrowse-End-User when using an org key (same as --end-user). |
UNBROWSE_ACCOUNT |
Optional: Which of several signed-in Unbrowse accounts to use. |
Unbrowse is a hosted MCP server. Most browser agents render a page for every step. Unbrowse first looks for a stored capability instead: a set of the website's own first-party HTTP requests, compiled into one callable tool. When one fits, it replays those requests and only hands back a result it has verified. When none fits, the agent does the task once in Unbrowse's recorded cloud browser (the unbrowse_browse_* tools) or you upload two HAR recordings, and Unbrowse turns that into a new capability so the next run needs no browser.
It looks in your own private space first and then in a public registry of sites other people have already compiled. It can also read one page as markdown, map a site's URLs or index a whole site in the background. Site logins live in its own password manager. When a run needs one, the person gets a one-time link to save it, so passwords stay out of the chat. You can also attach other apps' MCP servers, or any remote MCP by URL, to your account.
Most people connect to https://unbrowse.ai/mcp and sign in with OAuth. The MIT-licensed npm package `unbrowse` is a CLI whose `unbrowse mcp` command runs a local stdio proxy to the hosted server. The proxy answers one tool by itself, unbrowse_local_mcps, which lists the MCP servers in this machine's agent configs. The tool list the repository ships at v12.5.0 (skill/references/tools.json) holds 26 hosted tools, including plain `search` and `fetch` tools for ChatGPT-style connectors, so the proxy offers 27.
The README now opens with `npx -y unbrowse setup`, which writes skills and an always-use rule into every agent it finds and registers the proxy with Claude Code and Codex. That command is on the main branch only. The published CLI's cli.ts at v12.5.0 has no setup command, so until the next release the skill installer (`npx skills add unbrowse-ai/unbrowse --skill unbrowse`) and `unbrowse mcp add` do that work.
| To run it yourself | Node.js 18.17+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Unbrowse | Free tierEvery call needs an account (OAuth or API key). A monthly free allowance, then paid credit packs at $0.001 per verified call |
Sign in through your client's OAuth window for the hosted endpoint. Node is only needed for the local proxy, which uses the CLI's sign-in: run `npx -y unbrowse login` once, or set UNBROWSE_API_KEY to a key from unbrowse.ai/app. Codex also needs `codex mcp login unbrowse` after adding the server. On Grok Business and Enterprise an admin has to add the connector before users can.
The work runs on Unbrowse's hosted service; the npm package is only a client and proxy. How well learning works depends on the site. Run unbrowse_run with no matching capability and the agent has to browse the site once first. The proxy's --from-here mode covers only unbrowse_run; every other tool still goes through the hosted server, and `select` is not applied locally. In a shell with no terminal and no credentials, the CLI exits with code 3 instead of signing in. The OAuth link from `login --no-open` returns to 127.0.0.1, so it has to be opened on the same machine. unbrowse_index_status waits 20 seconds by default and 50 at most.
Suits agents that repeat tasks on the same websites, such as searches, listings and prices, where replaying a site's own API calls is cheaper than rendering pages each time, and teams willing to send that traffic and their saved logins through a paid hosted service. If you want a browser running entirely on your own machine with no account, pick a local browser automation server instead. For one site at a time, the same vendor's per-site servers (unbrowse-ai/sites) expose a single site's tools.
13 only read, 13 change things, 1 can delete or overwrite. A ? marks an optional parameter.
unbrowse_run changescapability?: stringtask?: stringtargetUrl?: stringinput?: objectaccountRefs?: arrayallowedDestinations?: arrayinteractionMode?: enumidempotencyKey?: stringselect?: arraydeadlineMs?: integerunbrowse_inspectrunId: stringselect?: arrayunbrowse_resume changesrunId: stringanswers?: objectexpectedStateRevision?: numberidempotencyKey?: stringselect?: arrayresponses?: arrayunbrowse_cancel changesrunId: stringunbrowse_discoverquery: stringminVersion?: stringunbrowse_sitessite?: stringunbrowse_learn changestraces?: arrayhar?: anygoal?: stringtitle?: stringunbrowse_forget deletescapability: stringunbrowse_browse_open changesurl: stringtask?: stringcountry?: stringunbrowse_browse_snapshotsessionId: stringtextOffset?: integerunbrowse_browse_act changessessionId: stringaction: enumref?: stringvalue?: stringname?: stringvault?: enumcredential?: stringkey?: stringms?: numberunbrowse_browse_finish changessessionId: stringtitle?: stringgoal?: stringunbrowse_browse_close changessessionId: stringdiscard?: booleanunbrowse_scrapeurl: stringformats?: arrayonlyMainContent?: booleanrender?: enumcountry?: stringheaders?: objectdeadlineMs?: numberunbrowse_mapurl: stringsearch?: stringlimit?: numberunbrowse_index changesurl: stringfocus?: stringmaxCapabilities?: numberpublic?: booleanunbrowse_index_statusjobId?: stringwaitSeconds?: numberunbrowse_credentials_listorigin?: stringquery?: stringlimit?: numbercursor?: stringunbrowse_credentials_request changesorigin: stringfields?: arrayreason?: stringunbrowse_credentials_statusrequestId: stringwaitSeconds?: numberunbrowse_connect changesapp?: stringurl?: stringname?: stringsearch?: stringdisconnect?: booleanunbrowse_import_mcps changesservers: arraydryRun?: booleanunbrowse_creditspack?: enumunbrowse_usagesearchquery: stringfetchid: stringunbrowse_local_mcps changesimport?: booleandryRun?: booleannames?: array