## RELEASE · v6.11.0
MCP is the default, not the CLI
v6.11.0 makes MCP the recommended way to drive Unbrowse from any agent
published 2026-05-12 · unbrowse v6.11.0
## SUMMARY
v6.11.0 rebuilds the Unbrowse MCP server around an agent-first contract: a disposable daemon the client respawns transparently, browse sessions that survive daemon restarts, structured next-actions on every tool response, and recipe prompts that hand the calling client a known-good pipeline. If you are driving Unbrowse from Claude, Codex, or any MCP-capable agent, switch off the CLI.
## WHAT'S NEW
- ›Disposable mcp-serve: the local daemon self-exits after idle, MCP transparently respawns and retries
- ›Browse sessions persist to ~/.unbrowse/sessions.jsonl and rehydrate on the next daemon boot
- ›Structured next_action on every tool response, not just prose hints
- ›Workflow recipe prompts (cached resolve, cold browse + publish, URL-contents fetch) exposed via listChanged
- ›Tightened SKILL.md so the agent loads only what it needs to act
## WHY MCP BEATS THE CLI FOR AGENTS
The CLI was built for humans typing into terminals; MCP is built for agents reasoning over a typed surface. The two-call contract (resolve, then execute) is enforced as the default surface in MCP, so the agent's LLM picks from a ranked shortlist with full evidence per endpoint instead of you scripting the flow. Every tool response carries a structured next_action field with the suggested follow-up tool and arguments, so agent code can route on a value instead of parsing English. There is no shell to escape, no exit codes to interpret, no flag matrix to memorise. MCP gives the agent the same surface as the CLI with richer hints and zero shell scripting.
## DISPOSABLE DAEMON, INVISIBLE TO THE AGENT
Earlier versions of unbrowse serve hung around forever. Every Ctrl-C of an MCP client left a detached daemon behind; after five sessions you had twenty zombie processes pinning ports and CPU. v6.11.0 makes the daemon disposable. unbrowse serve self-exits after UNBROWSE_SERVE_IDLE_MS of zero activity (default sixty seconds, set zero to disable). On the client side, MCP catches connect failures (ECONNREFUSED, ConnectionRefused, fetch failed, the full set), drops its cached server-ready promise, respawns the daemon, and retries the request once. From the agent's point of view, the lifecycle is invisible. From your process list's point of view, there is one daemon at most.
## SESSIONS SURVIVE THE REAPER
Disposability only works if state survives. Browse sessions are appended to ~/.unbrowse/sessions.jsonl on every mutation. When unbrowse serve cold-starts, the in-memory session map is rehydrated from this file. Open a tab, get reaped mid-flow, the next browse_snap against the same session id still works. The agent does not need to know the daemon restarted, and you do not need to redrive the browser to recover.
## RECIPE PROMPTS AND STRUCTURED HINTS
MCP clients that surface prompts (Claude Desktop, Claude Code, several IDE extensions) can now list and run workflow:* prompt templates that codify the canonical Unbrowse pipelines. The cached-resolve recipe shows the agent how to two-call against the marketplace; the cold-browse-publish recipe walks the live capture path; the URL-contents recipe handles raw fetch intents. listChanged is on, so prompt updates propagate without a client restart. Combined with structured next_action on every response, the calling agent has both the field-level routing it needs for its own logic and the recipe-level scaffolding for the user's intent.
## SETUP
# install + register the MCP server with one command npx unbrowse setup --mcp # or wire it manually: point your MCP client at unbrowse mcp # stdio transport
## SWITCH OVER
If your agent is shelling out to unbrowse resolve and unbrowse execute, point your MCP client at unbrowse mcp and delete the shell glue. The CLI is not going away, but every CLI flow has a richer MCP equivalent now, and that is where future work lands first.