
Unbrowse
Turn fragile website browsing into reusable API routes agents can resolve and replay via MCP, CLI, or TypeScript SDK.
Overview
Unbrowse is an agent skill most often used in Build integrations (also Operate iterate) that teaches agents to resolve and replay website API routes via MCP, CLI, or SDK.
Install
npx skills add https://github.com/unbrowse-ai/unbrowse --skill unbrowseWhat is this skill?
- Two-step workflow: resolve intent+URL to ranked routes, then execute or managed-browser capture
- MCP server, CLI (npx -y unbrowse), and TypeScript SDK surfaces for the same runtime
- Peer-reviewed benchmark cited: 94 live domains, 3.6× mean speedup, 40× fewer tokens vs fresh browser sessions
- Stores sanitized route metadata for replay instead of re-driving the full browser every call
- 94 live domains in peer-reviewed benchmark
- 3.6× mean speedup vs fresh browser sessions
- 40× fewer tokens vs fresh browser sessions (paper benchmark)
Adoption & trust: 590 installs on skills.sh; 702 GitHub stars; 1/3 security scanners passed (skills.sh audits).
What problem does it solve?
Your agent keeps reopening browsers for the same site, burning time and tokens because there is no stored, reusable route for the intent.
Who is it for?
Solo builders shipping agent workflows that need repeatable web data access across Claude Code, Cursor, or embedded TypeScript agents.
Skip if: Static public REST APIs you can call directly, or teams unwilling to run a local binary/MCP server with network and browser permissions.
When should I use this skill?
An agent needs intent+URL web data and you want resolve → execute (or managed capture) via MCP, CLI, or SDK.
What do I get? / Deliverables
You capture a route once, resolve it on later calls, and execute indexed endpoints for live data—or open managed capture only when the index misses.
- Ranked route shortlist from resolve
- Executed API response payload from stored route
- Captured route metadata when index miss requires browse
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Installing Unbrowse is primarily an integration step while wiring agent tools, even though replay pays off again in Operate. The skill documents MCP tools unbrowse_resolve and unbrowse_execute—canonical agent-to-web integration plumbing.
Where it fits
Wire unbrowse_resolve into your agent so it picks a stored checkout-status route instead of guessing selectors.
Embed unbrowse/sdk in a TypeScript worker that spawns the local binary for nightly supplier portal pulls.
Review sanitized route metadata and domain allowlists before agents execute captures with session cookies.
Replay an indexed support-portal route when ops tickets need fresh status without launching Chrome each time.
How it compares
Agent integration package for indexed web replay—not a generic scraper recipe and not a hosted marketplace MCP by itself.
Common Questions / FAQ
Who is unbrowse for?
Indie builders and agent authors who need Claude Code, Cursor, or Codex to hit real website data through MCP tools or the unbrowse CLI/SDK.
When should I use unbrowse?
During Build integrations when wiring agent tools to the web, at Ship security review before storing routes with cookies, and in Operate iterate when replaying production intents without full browser sessions.
Is unbrowse safe to install?
It runs a local runtime with network and browser access; review the Security Audits panel on this Prism page and your captured route metadata before executing against logged-in sessions.
SKILL.md
READMESKILL.md - Unbrowse
# Unbrowse Unbrowse turns websites into reusable API routes for agents. Teach a route once, store sanitized metadata, replay it on later calls — typically 30× faster and 90× cheaper than a fresh browser session (peer-reviewed benchmark across 94 live domains: 3.6× mean speedup, 40× fewer tokens — [arXiv:2604.00694](https://arxiv.org/abs/2604.00694)). This skill installs the instructions. The runtime (CLI binary + MCP server) comes from the `unbrowse` npm package — get it with `npx -y unbrowse`. ## Surfaces | Surface | Reach for it when | |---|---| | **MCP server** | An MCP-host agent (Claude Code, Claude Desktop, Cursor, Codex, Windsurf). Tools like `unbrowse_resolve`, `unbrowse_execute`, `unbrowse_go` appear in the host. | | **CLI** (`unbrowse`) | A shell or script that wants the same surface without an MCP host. | | **SDK** (`unbrowse/sdk`) | A TypeScript program embedding Unbrowse; the SDK spawns its own local binary. | ## The workflow Two tools, never one and never three: - **resolve** — "is there an indexed route for this intent + URL?" Returns a ranked shortlist, or a hard handoff to a browser session. - **execute** — pick one endpoint from the shortlist and run it. Returns the real data. - **browse-session** — when the API is too dynamic to predict, open a managed browser; local capture indexes the route metadata for next time. ## Quickstart Wire the MCP server into an MCP host: ```json { "mcpServers": { "unbrowse": { "command": "npx", "args": ["-y", "unbrowse", "mcp"] } } } ``` Then once: ```bash npx unbrowse setup ``` From a shell: ```bash unbrowse resolve --intent "search hacker news for openai" --url https://news.ycombinator.com unbrowse execute --skill-id <id-from-resolve> --endpoint-id <id-from-shortlist> ``` From Node: ```bash npm i unbrowse ``` ```typescript import { Unbrowse } from 'unbrowse/sdk'; const client = new Unbrowse({ apiKey: process.env.UNBROWSE_API_KEY }); const resolved = await client.resolve({ intent: 'search hn for openai', url: 'https://news.ycombinator.com' }); const result = await client.execute({ endpoint_id: resolved.available_operations![0].endpoint_id, params: { q: 'agents' } }); ``` ## Passive parallel indexing While you browse, Unbrowse reverse-engineers the page's API traffic and indexes it to publish — in the background, in parallel, so browsing stays fast. This is **on by default**; each `sync` checkpoint returns immediately instead of blocking on the page's network settle. Opt out per machine to index inline (slower checkpoints, complete endpoints before each returns): ```bash unbrowse settings --passive-index off # opt out; back on with: --passive-index on ``` Agents can toggle the same flag via the `unbrowse_settings` tool (`passive_index: true|false`). ## Links - npm: <https://www.npmjs.com/package/unbrowse> - Docs: <https://www.unbrowse.ai> - Source: <https://github.com/unbrowse-ai/unbrowse> structure: readme: README.md summary: SUMMARY.md MIT License Copyright (c) 2025 Unbrowse AI Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS P