Can an AI agent use Vercel?
As of 6 Oct 2026, an AI agent gets into Vercel on its own and does 20% of the core work.
- Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
- Access: Try first, claim later.
- Use: 20% of the work.
- Pay: Reaches the checkout: A billing API, none made yet.
- Leave: Leaves on its own: Nothing to cancel, what it made goes after 1 hour.
To reach L3 · Does the work: do half of the core work (now 20%).
With an account set up by a person: not measured yet.
What the levels meanDriven 6 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 sign-up page opens.
- Agents in a person's browserNot measured yet.
Sign-up page checked 13 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from
What an agent can do in Vercel.
On its own
- Put a test website online with no account needed
- Run a small piece of code behind that website and get an answer back
- Check a domain name's availability and price without signing up
1 more
- Read all the help documentation in an easy machine-readable format
What it can't, and why
- Create a full accountThe sign-up form rejected the agent's email address twice with no reason given and no visible human check
- Use custom domains, saved settings, previews, or AI toolsThose all require a full account, which could not be created
- Remove the test website itselfThe temporary access it has is not allowed to delete; it just expires after an hour
Can an AI agent sign up for Vercel on its own?
Not needed: a documented route works without an account.
Does Vercel have an MCP server, and can an agent connect to it?
Yes. Vercel has an official MCP server. The server signs an agent in with OAuth.
A new agent can get in on its own: in the drive of 6 Oct 2026, our agent got working access without signing up. Through the MCP server, 0 of our agent's 2 attempts worked.
What the drive found
APIOpenAPIMCP · officialCLISDKllms.txtWebhooks–SandboxHow does an AI agent get a Vercel API key?
In the drive of 6 Oct 2026, our agent got its Vercel API key over the API, without a browser or a person. vercel deploy --temporary (in the CLI help) issues an anonymous token scoped to one temporary project: works on GET /v13/deployments/{id} and /v3/deployments/{id}/events only; full tokens need an account.
Can an AI agent delete its Vercel account?
Not applicable: our agent used Vercel without an account, and what it made goes after 1 hour.
Can an AI agent pay for Vercel?
Reaches the checkout: a billing API, none made yet.
- Card checkout
It has a free plan.
What would let agents pay on their own
- Accept x402 or MPP on your API. Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card.
- List your plans on Stripe Projects. Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev).
No 402/x402/MPP/UCP/x-payment-info anywhere. Docs: POST /v1/billing/buy, vercel buy credits|addon|pro|domain --yes, MCP buy_pro/buy_credits/buy_domain charge the payment method on file. From docs only; not verified (no account, no card).
From the drive of 6 Oct 2026.
For the team behind Vercel.
Where agents stop in Vercel today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Let verified agents finish email sign-upStep-by-step guide
- Say why a sign-up was refused
- Let the anonymous token do moreStep-by-step guide
5 more fixes
- Let the anonymous token delete its deployment Step-by-step guide
- Allow or explain --temporary under CI
- Document --temporary in the web docs
- Announce CIMD in the OAuth metadata Step-by-step guide
- Publish an MCP server card 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
Part scores
Agent-ready setup
- llms.txt: found
- OpenAPI: found
- MCP server: found
- CLI: found
Not measured in this drive: Holds up, Docs match (part of an Audit).
The measures
- Work done20
- Reliability0
- Crash test–
For agents and builders.
The drive as data, every checkpoint and all 32 attempts.
How an agent connects · 4 tips
/api/tools/vercel.json/tools/vercel.mdMCP get_tool {"slug":"vercel"}
- vercel deploy --temporary --yes gives a live URL and a claim URL with no account; unset CI first or the CLI refuses
- Functions: export GET/POST Web handlers; a default export returning a Response hung and returned a bare 504
- Docs: append .md or send Accept: text/markdown
- Domain availability/price endpoints need no auth
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessllms.txt, llms-full.txt, .md pages and Accept: text/markdown, OpenAPI 3.0.3 (322 paths), get-started.md agent playbook, AI Catalog.
- Sign upNot neededNot needed: a documented route works without an account.
- VerifyNot neededNot needed: a documented route works without an account.
- KeyHeadlessvercel deploy --temporary (in the CLI help) issues an anonymous token scoped to one temporary project: works on GET /v13/deployments/{id} and /v3/deployments/{id}/events only; full tokens need an account.
- First callHeadlessGET /v13/deployments/{id} with the anonymous token: 200, readyState READY.
- First actionHeadlessTemporary deployment created without an account and served; redeployed with a working function. The CLI refuses --temporary while CI=true is set.
- PayNot triedNo 402/x402/MPP/UCP/x-payment-info anywhere. Docs: POST /v1/billing/buy, vercel buy credits|addon|pro|domain --yes, MCP buy_pro/buy_credits/buy_domain charge the payment method on file. From docs only; not verified (no account, no card).
- CancelNot neededNothing to cancel: our agent used the free plan.
- DeleteBlockedNo account to delete. The anonymous deployment could not be removed (vercel remove starts a login; DELETE with the anonymous token 403); it expires after 60 min. Documented: DELETE /v1/user sends a confirmation mail.
The attempt log · 32 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| llms.txt: GET /llms.txt | api | done ✓ | https://vercel.com/llms.txt 200 text/plain, H1 # Vercel, links to md indexes, llms-full.txt; /docs/llms.txt 308 redirect |
| AI catalog: GET /.well-known/ai-catalog.json | api | done ✓ | 200 application/ai-catalog+json specVersion 1.0, 4 entries: MCP PRM, openapi.json, agent-resources.md, docs graph.json |
| A2A agent card: GET /.well-known/agent-card.json and agent.json | api | failed ✓ | both 404 text/plain |
| MCP server card: GET https://mcp.vercel.com/server-card and /.well-known/mcp/server-card.json | api | failed ✓ | mcp.vercel.com/server-card 404 text/html; vercel.com/.well-known/mcp/server-card.json 404 |
| robots/aipref: GET /robots.txt and Content-Usage header | api | done ✓ | robots.txt: User-Agent: * / Content-Signal: search=yes, ai-input=yes, ai-train=no (Cloudflare Content Signals syntax, parses). No aipref Content-Usage line, no Content-Usage header on /docs. Disallow /api/, /oauth, /signup?* |
| markdown docs: GET /docs/deployments with Accept: text/markdown, and /docs/deployments.md | api | done ✓ | Accept negotiation: 200 content-type text/markdown, vary: Accept (no x-markdown-tokens). .md URL: 200 text/markdown |
| MCP discover: POST https://mcp.vercel.com/ server/discover 2026-07-28 unauthenticated | mcp | blocked ✓ | 401 WWW-Authenticate: Bearer error=invalid_token, resource_metadata=https://mcp.vercel.com/.well-known/oauth-protected-resource; PRM 200 JSON authorization_servers [https://vercel.com] |
| OpenAPI: GET https://openapi.vercel.sh/ | api | done ✓ | 200 application/json, openapi: 3.0.3, 11 MB |
| sign up: vercel signup --email the agent's inbox --non-interactive | cli | partial ✓ | CLI does not create the account itself: it prints https://vercel.com/signup?email=...&autoSubmit=1&next=/oauth/device?user_code=XNNP-PXDQ and polls the device flow. Sign-up continues in a browser. |
| sign up: Open the CLI sign-up URL in the browser; the page auto-submits the email; one retry clicking Continue with Email | browser | blocked ✓ | Both submits: server action POST /signup returned {"code":"unknown_error","message":"Please try again later or use a different signup method."}; page shows Please try again or try a different sign up method ... account recovery form. No visible challenge (no Turnstile/hCaptcha/reCAPTCHA detected). Other options: Google, GitHub, ChatGPT, Apple (we hold none of these accounts). No verification mail arrived. |
| Create a deployment from Git push or CLI: vercel deploy --yes with no account, then vercel deploy --temporary | cli | failed ✓ | No credentials: CLI suggests vercel deploy --temporary (claimable). With --temporary: Temporary deployments are not available for this attempt. Log in to continue. The CLI refuses client-side when ci-info detects CI (the shell had CI=true); no HTTP call made, and the message does not name CI as the reason. |
| Create a deployment from Git push or CLI: vercel deploy --temporary (no account) of a static index.html, then redeploy a change; read back | cli | done ✓ | With CI unset: deployment dpl_FXnpEwDpSqBukEfemEAaZA2CRkii READY at https://temporary-zippy-copper-ekspg0h.vercel.app, GET returns <h1>AgentDrives test v1</h1>; GET /v13/deployments/{id} with the anonymous token: readyState READY, aliasAssigned true. Expires in 60 min, claimUrl https://vercel.com/claim-deployment?code=••••. --temporary is in vercel deploy --help, not in the web docs. |
| first API/CLI call: GET https://api.vercel.com/v13/deployments/{id} with the anonymous token from .vercel/anonymous.json | api | done ✓ | 200 JSON readyState READY. The same token on /v2/user, /v6/deployments, /v9/projects/{id}, /v2/teams: 403 Token is not accepted (invalidToken). Scoped to the anonymous project only. |
| Run serverless/edge Functions behind the deployment: Deploy api/hello.js with the anonymous deployment and call it | cli | failed ✓ | First version (export default function handler(req) returning a Response) deployed READY but GET /api/hello timed out: 504 after 64 s. Cause of our own of the code: wrong handler shape for the Node runtime; no error text in the 504 body. |
| Run serverless/edge Functions behind the deployment: Redeploy with export function GET(request) and call it | cli | done ✓ | dpl_HnoMQMBz9a8mHzNGo15hpwExt75Z; GET https://temporary-zippy-copper-ekspg0h.vercel.app/api/hello 200 application/json {"ok":true,"from":"AgentDrives function",...} |
| View runtime logs and errors for deployments: Read build and runtime logs of the anonymous deployment | api | partial ✓ | GET /v3/deployments/dpl_HnoMQMBz9a8mHzNGo15hpwExt75Z/events with the anonymous token: 9 build events (Running build in iad1 ... Deployment completed). Runtime log of the function (console.log) not in events; /v1/projects/{id}/deployments/{id}/runtime-logs: 403 Token is not accepted; vercel logs starts a device login. |
| Get a preview URL for every branch/PR: vercel deploy --temporary --target preview | cli | blocked ✓ | Error: Anonymous deployments always target production, so "preview" is not available. Remove the "--target" option, or run `vercel login` to deploy to other environments. Needs an account; sign-up blocked. |
| Deploy an app for a user, then transfer it to their own account (claim deployments): Create an unclaimed deployment and get a claim URL; transfer it | cli | partial ✓ | vercel deploy --temporary returned claimUrl https://vercel.com/claim-deployment?code=•••• (expires 60 min); GET on it 307 to /auth-redirect/claim-deployment (needs a signed-in account). The claim itself needs a Vercel account, which we could not create; POST /projects/{id}/transfer-request needs a full token. |
| Search for, buy, and transfer a domain (registrar): Check availability and price of agentdrives-drive-test-2026.com without an account | api | partial ✓ | GET /v1/registrar/domains/{domain}/availability 200 {"available":true}; /price 200 {"years":1,"purchasePrice":11.25,...}; invalid name 400 with readable message (HttpApiDecodeError, not problem+json). Buying not attempted (costs money, needs account). |
| Call any LLM through one gateway endpoint: List models and call chat completions on ai-gateway.vercel.sh | api | blocked ✓ | GET /v1/models 200 public list; POST /v1/chat/completions without key 401 {"error":{"message":"Missing Authorization header","type":"authentication_error"}}. A key needs a Vercel account (sign-up blocked). |
| Roll back production to a previous deployment instantly: Needs project/team API access | api | blocked ✓ | No account: sign-up rejected (unknown_error). The anonymous deploy token is refused on project endpoints (e.g. /v9/projects/{id}/env, /v2/deployments/{id}/aliases: 403 Token is not accepted). |
| Add a custom domain and get automatic SSL: Needs project/team API access | api | blocked ✓ | No account: sign-up rejected (unknown_error). The anonymous deploy token is refused on project endpoints (e.g. /v9/projects/{id}/env, /v2/deployments/{id}/aliases: 403 Token is not accepted). |
| Manage environment variables per environment: Needs project/team API access | api | blocked ✓ | No account: sign-up rejected (unknown_error). The anonymous deploy token is refused on project endpoints (e.g. /v9/projects/{id}/env, /v2/deployments/{id}/aliases: 403 Token is not accepted). |
| Restrict preview/production access (deployment protection): Needs project/team API access | api | blocked ✓ | No account: sign-up rejected (unknown_error). The anonymous deploy token is refused on project endpoints (e.g. /v9/projects/{id}/env, /v2/deployments/{id}/aliases: 403 Token is not accepted). |
| Split production traffic across deployments (rolling releases): Needs project/team API access | api | blocked ✓ | No account: sign-up rejected (unknown_error). The anonymous deploy token is refused on project endpoints (e.g. /v9/projects/{id}/env, /v2/deployments/{id}/aliases: 403 Token is not accepted). |
| get API credentials: vercel deploy --temporary stores a token in .vercel/anonymous.json | cli | partial ✓ | Anonymous token scoped to one temporary project: accepted on GET /v13/deployments/{id} and /v3/deployments/{id}/events, refused (403 Token is not accepted) on /v2/user, /v6/deployments, /v9/projects, env, aliases, DELETE deployment, and by mcp.vercel.com (401). Full tokens need an account (vercel login = device flow, or Account > Tokens). |
| pay step: Probe 402/x402/MPP and billing routes without paying | api | partial ✓ | No 402 anywhere: api.vercel.com unauthenticated 403 missingToken; x402./mpp./agents.vercel.com 404 DEPLOYMENT_NOT_FOUND; no x402/MPP/Stripe Projects/agentic commerce in llms-full.txt; no x-payment-info in OpenAPI; /.well-known/ucp 404; Bazaar lists only third-party *.vercel.app apps; mpp.dev none. Documented: POST /v1/billing/buy (credits, charged to the default payment method on file via Stripe invoice), vercel buy credits|addon|pro|domain --yes, MCP buy_pro/buy_credits/buy_domain with get_purchase_quote. Hobby plan is free. Not verified (no account, no card). |
| cancel: Find how to downgrade/cancel | none | skipped | No plan started. Docs: downgrade to Hobby described at /docs/plans/pro-plan#downgrading-to-hobby (dashboard); no downgrade endpoint found in OpenAPI. |
| delete account: Delete what we created | cli | failed ✓ | No account was created. The anonymous deployment cannot be removed by us: vercel remove starts a device login; DELETE /v13/deployments/{id} with the anonymous token 403 Token is not accepted. It expires on its own after 60 min (expiresAt 1791266658609). Documented account delete exists: DELETE /v1/user sends a confirmation mail with a link. |
| MCP discover with credentials: server/discover on mcp.vercel.com with the anonymous token; DCR probe | mcp | blocked ✓ | 401 again (anonymous token not accepted). AS metadata (vercel.com/.well-known/oauth-authorization-server): registration_endpoint (DCR, live: POST {} -> 400 invalid_redirect_uri), no client_id_metadata_document_supported, device_authorization_endpoint present, PKCE S256. |
| find docs: llms.txt, markdown docs, OpenAPI | api | done ✓ | llms.txt, llms-full.txt (10 MB), .md pages and Accept: text/markdown, OpenAPI 3.0.3 at openapi.vercel.sh (322 paths, 444 operations), get-started.md agent playbook |
| first real action: Create a deployment with no account (vercel deploy --temporary) | cli | done ✓ | dpl_FXnpEwDpSqBukEfemEAaZA2CRkii READY, page served <h1>AgentDrives test v1</h1>; later dpl_HnoMQMBz9a8mHzNGo15hpwExt75Z with a working function. Needed CI unset: the CLI refuses --temporary when ci-info sees CI=true. |
Also in Hosting and deploys.
RailwayL3Gets in on its ownVercel vs Railway
Fly.ioL2Gets in on its ownVercel vs Fly.io
NetlifyL2Gets in on its ownVercel vs Netlify
RenderL1Can't sign up on its ownVercel vs Render