V2ex (v2ex.com) for agents: Search v2ex.com β through Unbrowse's scoped MCP for v2ex.com (unofficial), which replays v2ex.com's own first-party API (no browser, verified results)...
V2ex as tools for your agent. Unofficial: not affiliated with or endorsed by v2ex.com. Unbrowse compiled these from v2ex.com's own requests: each call replays the site's first-party API server-side and returns a verified result. No scraping of rendered pages, no browser on your side, no v2ex.com API key.
This server is a tool scope holding only v2ex.com: its compiled tools plus the Unbrowse tools that run them, so the agent's tool list stays small and every call stays on v2ex.com.
claude mcp add --transport http v2ex https://unbrowse.ai/mcp/v2ex.com
codex mcp add v2ex --url https://unbrowse.ai/mcp/v2ex.com && codex mcp login v2ex
{"mcpServers":{"v2ex":{"url":"https://unbrowse.ai/mcp/v2ex.com"}}}
The first connect signs in to Unbrowse with OAuth (free tier, only verified results count). For scripts, send Authorization: Bearer $UNBROWSE_API_KEY (key from https://unbrowse.ai/app/keys; keep it in a secret manager, never in config you commit).
If none of the tools below are in this session's tool list, the server is not connected or not signed in: say so and stop. Do not fetch v2ex.com some other way and present it as this skill's result.
v2ex_com__render_page β Search v2ex.comSearch v2ex.com and read the results page (/go/apple). The site builds its results in the browser, so each run renders the page (Unbrowse's own browser, then a hosted renderer when the site blocks it) instead of calling an API: seconds, not milliseconds. Use for requests like βsearch v2ex.com for apple β Search v2ex.com for appleβ. Inputs: query e.g. "apple". Returns the page's title, readable text and links. Read-only on v2ex.com.
query (string, required) β query β what to search for on v2ex.com{"query":"muse"}
Always there too: unbrowse.run (a task on v2ex.com in plain words), unbrowse.inspect, unbrowse.resume, unbrowse.scrape and unbrowse.map (any page on v2ex.com), and the recorded cloud browser unbrowse.browse.open β unbrowse.browse.act β unbrowse.browse.finish. Hosts that reject dotted names show them with _ (unbrowse_run).
status. succeeded carries the verified result. input_required is not a failure: answer the open fields with unbrowse.resume {runId, answers} on the same run.unbrowse.run {task}. It fails with no_capability when nothing is compiled for that yet: do it once with unbrowse.browse.open on v2ex.com β unbrowse.browse.act β unbrowse.browse.finish, which compiles a new tool this server lists next time. Anything off v2ex.com is refused here (not_in_scope): use the general Unbrowse server for that.unbrowse.browse.act with action: "autofill" fills v2ex.com's login from their Unbrowse password manager.succeeded result says. outcome_unknown means a change may have happened: check before retrying. Posting, buying, sending or deleting needs the user's go-ahead.Every tool is also a REST call:
curl -s https://unbrowse.ai/api/v1/sites/v2ex.com/call/v2ex_com__render_page \
-H "authorization: Bearer $UNBROWSE_API_KEY" -H "content-type: application/json" \
-d '{"query":"muse"}'
OpenAPI: https://unbrowse.ai/api/v1/sites/v2ex.com/openapi.json. Every other site: the general Unbrowse skill (https://github.com/unbrowse-ai/unbrowse) and https://unbrowse.ai/mcp.