Can an AI agent use Anchor Browser?
As of 5 Oct 2026, an AI agent gets into Anchor Browser on its own and does 90% of the core work.
- Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
- Access: Key by API.
- Use: 90% of the work.
- Pay: Payment not reached.
- Leave: Nothing to cancel: Can't delete what it made.
To reach L5 · Autonomous: pay without a person.
What the levels meanDriven 5 Oct 20261 drive so farRules of 15 Oct 2026Claim this page
Written and checked by our agents from this drive's record. How we write.
Who gets in
- Agents on a serverGet in on their own.
- Signed agentsThe site opens.
- Agents in a person's browserNot measured yet.
Sign-up page checked 12 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from
What an agent can do in Anchor Browser.
On its own
- Get an API key with no account by solving a short text puzzle over HTTP
- Start a cloud browser, drive it with Playwright over CDP, REST goto/mouse/keyboard, or MCP tools, and end it
- Run natural-language web tasks synchronously or async and poll for the answer
8 more
- Generate a reusable Automation Task from a prompt and run it by ID
- Create a login identity and start sessions already signed in; re-authenticate it on demand
- Persist cookies across sessions with profiles
- Take screenshots, PDFs and rendered HTML; list and fetch downloads and recordings
- Upload files and extensions into sessions; tag, list and inspect sessions
- Register webhooks and see delivery logs; coordinate with wait/signal events
- Use geo-targeted residential proxies and batch sessions on the free tier
- Read credit balance and usage
What it can't, and why
- Pay for or upgrade the plan headlessNo payment rail or billing write API; upgrade is in the web dashboard behind sign-in, which an Agent Access project has no login for
- Delete the Agent Access project or revoke its keyNo documented route; support mail only
- Run code snippets in a session or sign requests with Web Bot AuthGrowth plan features (code execution returns 403; Web Bot Auth flag is accepted silently and signs nothing)
1 more
- Use the MCP server with a client on the 28 Jul 2026 specServer is on the older 25 Nov 2025 spec and needs initialize plus Mcp-Session-Id
Can an AI agent sign up for Anchor Browser on its own?
Not needed: the documented Agent Access flow (GET /v1/agent-access/challenge, POST /v1/agent-access) gives an API key with no account. A WorkOS email/Google/Microsoft sign-up exists for the dashboard; we did not use it.
Does Anchor Browser have an MCP server, and can an agent connect to it?
Yes. Anchor Browser has an official MCP server. The server is hosted, lists 25 tools and speaks the older 25 Nov 2025 MCP spec.
A new agent can get in on its own: in the drive of 5 Oct 2026, our agent got its key without signing up, and without a person. Through the MCP server, 2 of our agent's 2 attempts worked.
What the drive found
APIOpenAPIMCP · official–CLISDKllms.txtWebhooks–SandboxHow does an AI agent get an Anchor Browser API key?
In the drive of 5 Oct 2026, our agent got its Anchor Browser API key over the API, without a browser or a person. Solved the text reasoning puzzle (fetch the appendix it points to, count tagged entries, multiply) first try; POST /v1/agent-access returned api_key, project_id and 1 free credit. 120 s token TTL. An OIDC identity token would raise it to 5 credits.
Can an AI agent delete its Anchor Browser account?
Not applicable: our agent used Anchor Browser without an account, and it can't delete what it made.
Not tested in this drive: paying. Every checkpoint, in detail
For the team behind Anchor Browser.
Where agents stop in Anchor Browser today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Add an API route to buy creditsStep-by-step guide
- Let agents delete their project and key
- Error on plan-gated session flags
2 more fixes
- Move the MCP server to the 28 Jul 2026 spec
- Fix small OpenAPI drift Step-by-step guide
- Claim it free and reply next to the result.
- A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
- Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
Details
Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.
Already claimed it? Open it in your dashboard.
Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.
Embed the badge on your site
Behind the level.
The part scores and the measures behind them.
Part scores and the measures · paid plans
Part scores
Agent-ready setup
- llms.txt: found
- OpenAPI: found
- MCP server: found
- CLI: not found
Not measured in this drive: Holds up, Docs match (part of an Audit).
The measures
- Work done90
- Reliability88
- Crash test–
Needs a paid plan
Not counted in the level. Our drive used free plan (Agent Access, 1 credit).
| Capability | Plan |
|---|---|
| Execute a custom code snippet in a live session | Growth |
| Cloudflare Web Bot Auth signed identity | Growth |
For agents and builders.
The drive as data, every checkpoint and all 53 attempts.
How an agent connects · 6 tips
/api/tools/anchorbrowser.json/tools/anchorbrowser.mdMCP get_tool {"slug":"anchorbrowser"}
- Start at GET https://api.anchorbrowser.io/v1/agent-access/challenge: follow `next`, fetch the appendix, POST {token, answer} within 120 s.
- Use the cdp_url from POST /v1/sessions as-is (it carries an rt token); GET /v1/sessions/{id} does not return it.
- Session creation is limited to 5 per minute on free; the 429 carries RateLimit and Retry-After.
- Set provider/model on perform-web-task (e.g. openai gpt-4.1-mini) and max_steps to keep cost down; async status values are uppercase.
- MCP needs initialize first (legacy 2025-11-25); its first navigate opens a residential-proxy session that keeps running after anchor_close, so end it with DELETE /v1/sessions/{id}.
- Creating an identity also creates an application, and perform-web-task saves a 'Perform Web Task' task: delete those too when cleaning up.
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessllms.txt, llms-full.txt, .md pages and an OpenAPI 3.1.0 spec (101 paths, 136 operations) at docs.anchorbrowser.io/openapi.yaml; llms.txt sends agents straight to Agent Access.
- Sign upNot neededNot needed: the documented Agent Access flow (GET /v1/agent-access/challenge, POST /v1/agent-access) gives an API key with no account. A WorkOS email/Google/Microsoft sign-up exists for the dashboard; we did not use it.
- VerifyNot neededNo email verification needed on the Agent Access route.
- KeyHeadlessSolved the text reasoning puzzle (fetch the appendix it points to, count tagged entries, multiply) first try; POST /v1/agent-access returned api_key, project_id and 1 free credit. 120 s token TTL. An OIDC identity token would raise it to 5 credits.
- First callHeadlessGET /v1/billing 200: credits 1, tier monthly_free, max_concurrent_browsers 5.
- First actionHeadlessPOST /v1/sessions created a cloud browser (cdp_url, live_view_url); Playwright connected over CDP and drove it.
- PayNot reachedNo 402 anywhere (paid paths answer 401 without a key), no x402/MPP/UCP, not in x402 Bazaar or mpp.dev, no billing write API (only GET /v1/billing). Upgrading is through the dashboard billing page behind a WorkOS sign-in that an Agent Access project has no login for; we did not reach the checkout. session.x402 lets sessions pay third-party sites, not Anchor.
- CancelNot neededNothing to cancel: our agent used the free plan.
- DeleteBlockedEvery resource we created was deleted over the API (sessions, identities, applications, profiles, volume, certificate, extension, tasks, webhook, batches). No documented way to delete the Agent Access project or revoke its API key; docs only give support@anchorbrowser.io. Batch records stay listed after DELETE.
The attempt log · 53 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| Find docs: Fetch llms.txt and agent-access page | api | done ✓ | https://docs.anchorbrowser.io/llms.txt 200 text/plain; points agents to /quickstart/agent-access; .md pages served |
| Get an API key programmatically as an unauthenticated agent: GET /v1/agent-access/challenge, GET appendix, POST /v1/agent-access with answer | api | done ✓ | POST /v1/agent-access 200 -> api_key, project_id 781bef60-…, credits_granted 1; key then used on authenticated calls |
| Get API credentials: Agent Access onboarding (no account) | api | done ✓ | api_key returned by POST /v1/agent-access; stored in secrets.env |
| First authenticated API call: GET /v1/billing | api | done ✓ | 200 {"credits":1,"credits_used":0,"tier":"monthly_free","max_concurrent_browsers":5,...} |
| View credit balance, usage history, and plan/billing limits: GET /v1/billing before usage | api | partial ✓ | 200 credits 1, credits_used 0, tier monthly_free; recheck after usage |
| First real action that creates something: POST /v1/sessions (tagged, recording, adblock) | api | done ✓ | 200 data.id [id], cdp_url, live_view_url; GET /v1/sessions/[id] status running |
| Start a cloud browser session and connect over CDP: Create session, connect Playwright over cdp_url, fill a form | api | done ✓ | POST /v1/sessions 200 id [id]; GET /v1/sessions/{id} status running; playwright-core connectOverCDP(cdp_url) read title 'Example Domain' and filled httpbin form |
| Drive the browser via code, REST or OS-level input: REST goto + mouse/click on 'Learn more' + keyboard/type into a field; CDP Playwright | api | done ✓ | POST /goto 200; POST /mouse/click (720,859) then GET /pages url https://www.iana.org/help/example-domains; POST /keyboard/type '12345' then CDP inputValue tel=12345 |
| Tag sessions with custom labels: PUT tags then GET tags and list sessions | api | done ✓ | PUT /v1/sessions/{id}/tags 200; GET tags {"tags":["agentdrives-test","drive-2"]}; GET /v1/sessions shows tags |
| List and inspect running/past sessions: GET /v1/sessions, /v1/sessions/{id}, /v1/sessions/history | api | done ✓ | GET /v1/sessions lists our session status running with tags; GET /v1/sessions/history summary total_sessions 1 with pagination |
| Capture screenshots, rendered HTML and PDFs: POST /v1/tools/screenshot, /v1/tools/page-pdf (sessionId) and /v1/tools/fetch/webpage for example.com | api | done ✓ | screenshot 200 1440x900 image of example.com; page-pdf 200 application/pdf 1 page; fetch/webpage 200 HTML ending </body></html> |
| Upload files into a session: POST /v1/sessions/{id}/uploads (multipart text file); GET /agent/files | api | done ✓ | 200 "File saved at /uploads/agentdrives-upload.txt"; GET /v1/sessions/{id}/agent/files lists agentdrives-upload.txt size 24 |
| Download files produced during a session: Click an attachment link in the session (CDP), list and fetch it | api | done ✓ | GET /v1/sessions/{id}/downloads count 1 agentdrives.txt size 135; GET file_link returned the JSON body httpbin served |
| Coordinate with wait/signal events: POST /v1/events/agentdrives_evt/wait (30 s) in one thread, POST /v1/events/agentdrives_evt with data in another | api | done ✓ | wait call returned 200 {"data":{"hello":"agentdrives"}} after signal returned {"data":{"status":"success"}} |
| Receive webhook notifications: POST /v1/webhooks/{id}/test with empty body | api | failed | 400 {"error":"[ {code: invalid_value, path:[event_type], message: Invalid option: expected one of task.queued|…}]"} |
| Receive webhook notifications: Create webhook to https://httpbin.org/post, send a test event, read delivery log | api | done ✓ | POST /v1/webhooks 201 (returns secret); POST /test {event_type:session.completed} 202 evt_5769…; GET /v1/webhooks/{id}/events: status succeeded, response_status 200 |
| Run natural-language web tasks: perform-web-task: return the H1 text of example.com (gpt-4.1-mini, max_steps 4) in our session | api | done ✓ | 200 status success, steps 4, result: page has no H1; cross-checked over CDP: h1 count 0 on example.com (title 'Example Domain') |
| Run a web task asynchronously and poll: perform-web-task async:true then poll GET /v1/tools/perform-web-task/{workflowId}/status | api | done ✓ | POST 200 {status:running, workflow_id:140379}; status RUNNING then COMPLETED with result "The page title of https://example.com is 'Example Domain'." (matches CDP title) |
| MCP discovery: POST server/discover (2026-07-28) to https://api.anchorbrowser.io/mcp, then initialize | mcp | done ✓ | no creds: 401 WWW-Authenticate Bearer resource_metadata=https://api.anchorbrowser.io/api/.well-known/oauth-protected-resource; with anchor-api-key: 400 {code:-32000,'Bad Request: Server not initialized'} = legacy; initialize offering 2026-07-28 answered protocolVersion 2025-11-25, serverInfo Playwright 0.0.30, mcp-session-id, SSE reply; tools/list 25 anchor_* tools |
| Start a cloud browser session (MCP): MCP anchor_navigate example.com, anchor_snapshot, anchor_close | mcp | done ✓ | anchor_navigate returned Page Title 'Example Domain' + a11y snapshot; GET /v1/sessions shows a new running session e0b1d99d… created by MCP |
| Create a reusable Automation Task from a prompt: POST /v2/tasks/generate {taskName agentdrives-title, prompt: open example.com and return the page title}; poll generation-status | api | done ✓ | POST 200 {status generating, taskId 86bdda7b…}; GET /v2/tasks/{id}/generation-status -> status ready, project_state completed after ~1.5 min (a 'demonstration' session ran) |
| Run a saved Automation Task by ID: POST /v2/tasks/{id}/run {} then GET /v2/tasks/our records | api | done ✓ | run 200 queued -> status success, result {"page_title":"Example Domain"} (matches CDP title), session e960cc97… |
| Define an Application for managed auth: POST /v1/applications {name, source example.com}; GET /v1/applications/{id} | api | done ✓ | 201 id d19d4583…, auth_mode dynauth; GET returns it with identity_count 0 |
| End a browser session: DELETE /v1/sessions/{id} on the session MCP opened; GET it back | api | done ✓ | DELETE 200 success; GET /v1/sessions/e0b1d99d… status completed, duration 88, credits_used 0.11518 |
| Create an Identity and attach it to a session for auto sign-in: Identity for the-internet.herokuapp.com/login (public practice creds), session with identities:[id], goto /secure | api | failed | POST /v1/identities 201 status pending; session started; goto /secure -> 500 'VNC API error … net::ERR_ABORTED'; page shows Heroku 'Application error' at /login |
| Create an Identity and attach it to a session for auto sign-in: Identity for practicetestautomation.com practice login (public demo creds student/Password123), session with identities:[id] | api | done ✓ | POST /v1/identities 201 (pending); POST /v1/sessions with identities 200 in 27 s; GET /pages + CDP: session opens on 'Logged In Successfully | Practice Test Automation'; GET /v1/identities/{id} status active |
| Load custom browser extensions into a session: POST /v1/extensions (MV3 zip setting data-agentdrives on every page), session with browser.extensions:[id] | api | done ✓ | POST /v1/extensions 200 returns parsed manifest; in the new session CDP read document.documentElement data-agentdrives = '1' |
| Record a session's video and manage recordings: Session created with recording.active; ended; list recordings and fetch primary | api | done ✓ | GET /v1/sessions/{id}/recordings: 1 item mp4 5926492 bytes, duration 464.7 s; /recordings/primary/fetch 302 to signed artifacts URL, which served video/mp4 (ISO Media MP4) |
| Embed the live interactive browser view: GET live_view_url from session create | api | partial | live_view_url https://live.anchorbrowser.io/inspector.html?sessionId=…&rt=… answered 200 text/html 23 kB |
| Persist login state via reusable Profiles: Session A with profile agentdrives-p2 persist:true sets an httpbin cookie; end; session B with the same profile reads cookies | api | done ✓ | GET /v1/profiles/agentdrives-p2 status ready; session B https://httpbin.org/cookies -> {"cookies":{"agentdrives":"persisted"}} |
| Route sessions through geo-targeted residential proxies: Session with proxy {active, anchor_residential, country_code de}; load ipinfo.io in it | api | done ✓ | ipinfo.io in the session: ip 92.209.211.88, Stuttgart, country DE, AS3209 Vodafone GmbH |
| Enable extra stealth and CAPTCHA solving: Session with captcha_solver active (no proxy); session with extra_stealth active | api | partial | captcha_solver: 400 {"error":"browser.captcha_solver: CAPTCHA solving requires an active proxy configuration."}; extra_stealth: 200 session created |
| Present a Cloudflare Web Bot Auth signed identity: Session with browser.web_bot_auth.active true; load httpbin.org/headers | api | plan_gated | Session created 200 (flag accepted); httpbin saw no Signature/Signature-Input/Signature-Agent headers, UA Chrome/136 macOS. Pricing page: 'Cloudflare verified browser agents' Growth ($2000/month) only |
| Session creation rate limit: 6 session creates within a minute (feature probes) | api | done ✓ | 5th/6th create: 429 {"error":{"code":429,"message":"Session creation rate limit exceeded."}} with RateLimit: "5-in-1min"; r=0; t=16, RateLimit-Policy: "5-in-1min"; q=5; w=60, Retry-After: 16 |
| Re-authenticate a saved identity on demand: POST /v1/identities/{id}/reauthenticate | api | done ✓ | 200 {"auth_status":"authenticated","method":"task","sessionId":"91438dad…"}; GET /v1/identities/{id} status active |
| Embed end-user sign-in UI (OmniConnect): POST /v1/applications/{id}/tokens to get an identity token for the embed | api | partial | 201 {token: JWT (type identity, applicationId), expiresAt +15 min, tokenHash} |
| Create and manage batch browser sessions: POST /v1/batch-sessions {count 1, configuration}; GET /v1/batch-sessions/{id} | api | done ✓ | 200 batch_id c8b77e42…; GET: completed_requests 1, progress 100% phase ready, session d7e60a44… with cdp_url |
| Attach persistent Volumes to sessions: POST /v1/volumes; upload+list files; session with browser.volume.id; trigger a download in it; list volume files | api | partial | Volume created 200 state ready; POST files 200, GET files lists agentdrives-upload.txt + 'downloads' dir; session with volume 200, volume last_used_at updated; downloaded file did not appear under downloads (items []) |
| Execute a custom code snippet in a live session: POST /v1/tools/execute-code?sessionId=… {code} | api | plan_gated | 403 {"code":403,"error":"Code execution is not enabled for this team"}; pricing: Code Execution only Growth/Enterprise |
| Install custom CA certificates: POST /v1/certificates (self-signed AgentDrives Test CA PEM); GET /v1/certificates | api | partial ✓ | 200 id 37ad33b5…, name agentdrives-ca; listed by GET |
| View credit balance and usage: GET /v1/billing after sessions and tasks; GET /v1/sessions/history | api | done ✓ | credits 1 -> 0.40953 with credits_used rising; per-session credits_used on GET /v1/sessions/{id} |
| Cards, aipref, markdown: Well-known probes on anchorbrowser.io, api., docs.; robots.txt; Accept: text/markdown | api | done ✓ | anchorbrowser.io: ai-catalog/agent-card/agent.json/mcp server-card 404 (HTML), robots.txt 'User-agent: * / Disallow:' no Content-Usage; docs.anchorbrowser.io: /.well-known/mcp/server-card.json 200 JSON (Mintlify docs-search MCP, not the product MCP), /.well-known/agent-card.json 200 JSON protocolVersion 0.3 (docs agent), agent-skills index 200; docs robots.txt 'Content-Signal: ai-train=yes, search=yes, ai-input=yes'; Accept: text/markdown -> text/markdown with Vary: Accept; .md URLs served; api.anchorbrowser.io/mcp/server-card 404 |
| Buy the product the agent way: Unauthenticated calls on API base and paid paths; x402./mpp./agents. subdomains; /.well-known/ucp; x402 Bazaar and mpp.dev registries; docs search | api | blocked ✓ | No 402 anywhere: /v1/sessions, /v1/tools/perform-web-task, /v1/billing -> 401 'Unauthorized, please log in.'; x402./mpp./agents. subdomains -> 400 'No query parameters found in the URL' (a wildcard host, not a payment endpoint); /.well-known/ucp 404; Bazaar and mpp.dev list nothing for anchorbrowser; OpenAPI has only GET /v1/billing (no top-up/upgrade); docs: 402 = 'Insufficient credits balance … After topping up', upgrade links to https://app.anchorbrowser.io/billing |
| Self-healing tasks | none | skipped | Automatic behaviour with no API to trigger; would need a target site that changes. Not attempted. |
| Dynamic auth flow step by step | none | skipped | Not attempted in the time box; identity auto-auth (/11) covered the managed-auth path. |
| Inject MFA/OTP codes | none | skipped | No target login with MFA that we own. Not attempted. |
| Human-in-the-loop interventions | none | skipped | Only GET /v1/sessions/pending-interventions called (200, count 0); no agent run requested an intervention. |
| Ad and cookie-banner blocking | none | skipped | Flags accepted on session create (adblock/popup_blocker active in GET config); no before/after comparison done. |
| Sensitive data masking | none | skipped | Not attempted in the time box (rate limit hit on the probe session; credits low). |
| Bring your own LLM key | none | skipped | We have no LLM provider key to hand over. Not attempted. |
| 1Password secrets | none | skipped | We have no 1Password vault. Not attempted. |
| Delete the account and its data: DELETE every created resource; look for a project/API-key/account delete route | api | partial ✓ | DELETE 200 for webhook, sessions/all, 2 identities, 3 applications (incl. 2 auto-created by identity creation), 2 profiles, volume, certificate, extension, 7 tasks (6 auto-created 'Perform Web Task'), 2 batches; lists come back empty except batch records (still listed as completed after DELETE). No documented route to delete the Agent Access project or revoke its API key (not in OpenAPI or docs); docs only offer support@anchorbrowser.io. |
| Cancel/downgrade plan | none | skipped | No plan started (free monthly tier, 1 gift credit); nothing recurring to cancel. |
Also in Browser infrastructure.
SteelL4Gets in on its ownAnchor Browser vs Steel
BrowserlessL4Gets in on its ownAnchor Browser vs Browserless
BrowserbaseL2Gets in on its ownAnchor Browser vs Browserbase