Can an AI agent use Neon (neon.com)?
As of 2 Oct 2026, an AI agent gets into Neon on its own and does 45% of the core work.
- Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
- Access: Try first, claim later.
- Use: 45% of the work.
- Pay: Payment not reached.
- Leave: Leaves on its own: Nothing to cancel, what it made goes after 3 days.
To reach L3 · Does the work: do half of the core work (now 45%).
With an account set up by a person: not measured yet.
What the levels meanDriven 2 Oct 2026New level in the latest driveRules 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 agentsNot checked: its robots.txt asks crawlers to stay off the sign-up page.
- 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 Neon (neon.com).
On its own
- Get a working database with no account and no human, in seconds, using a documented 'try it free' route.
- Run SQL queries, add rows, and install extra database features like vector search and maps data.
- Automatically shrink the database to save cost when idle, and wake it back up on the next request.
3 more
- Set up basic user sign-up and login, and let a web app read and write data securely tied to that login.
- Check database health and apply configuration changes from a script instead of a web dashboard.
- Delete the temporary database when done, through a documented command.
What it can't, and why
- Create a real, permanent Neon accountThe sign-up page shows a security check that never let the automated browser through.
- Create database branches, restore to an earlier point, or see logsThese need a real claimed account; the temporary database refuses them.
- Deploy functions, use file storage, or use the AI gatewayThese features are turned off until a human claims the project, and some also need a paid plan.
1 more
- Pay for a paid planUpgrading only happens on the account dashboard, which needs the account the agent couldn't create.
Can an AI agent sign up for Neon on its own?
Not needed: a documented route works without an account.
Does Neon (neon.com) have an MCP server, and can an agent connect to it?
Yes. Neon has an official MCP server. The server is hosted and signs an agent in with OAuth.
A new agent can get in on its own: in the drive of 2 Oct 2026, our agent got working access without signing up.
What the drive found
APIOpenAPIMCP · officialCLISDKllms.txtWebhooks–SandboxHow does an AI agent get a Neon (neon.com) API key?
In the drive of 2 Oct 2026, our agent got its Neon API key over the API, without a browser or a person. Documented no-account route (auth.md, Claimable Neon): `neon claim create` or POST claimable.neon.tech/v1/agent/identity -> claim token -> OAuth jwt-bearer access token -> database_url, Data API and Auth URLs. Temporary (72 h) and limited: most Management API routes return 403 'not available before claim'. A full account API key needs console sign-up.
Can an AI agent delete its Neon account?
Not applicable: our agent used Neon without an account, and what it made goes after 3 days.
Not tested in this drive: paying. Every checkpoint, in detail
For the team behind Neon.
Where agents stop in Neon (neon.com) today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Let verified agents through the sign-up pageStep-by-step guide
- Open branching routes on claimable projectsStep-by-step guide
- Don't freeze a project when a claim startsStep-by-step guide
3 more fixes
- Return identity_assertion as documented
- Add a headless account and API-key route Step-by-step guide
- Expose plan upgrades through the API 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 · level history · paid plans
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 done45
- Reliability100
- Crash test–
Level history
- 1 Oct 20262 drivesL3Does the work
- 2 Oct 2026new driveL2Gets in
Needs a paid plan
Not counted in the level. Our drive used none (no account); claimable no-account project (Free-plan limits, pre-claim restrictions).
| Capability | Plan |
|---|---|
| AI Gateway | Launch/Scale (prepaid credits) and a claimed project |
| IP allowlist | paid |
| Protected branches | paid |
| Spending notifications | paid |
| AI Gateway credits | paid |
For agents and builders.
The drive as data, every checkpoint and all 50 attempts.
How an agent connects · 7 tips
/api/tools/neon.json/tools/neon.mdMCP get_tool {"slug":"neon"}
- No account? Read https://neon.com/auth.md and run `neon claim create` (npm package `neon`): you get Postgres, Data API and Managed Better Auth in seconds, for 72 hours.
- The REST identity call returns `claim_token`, not `identity_assertion` as documented; use it as the jwt-bearer assertion.
- Pre-claim, most management routes return 403 route_not_allowed; branches, roles, databases, snapshots, logs, credentials, functions and buckets need a claimed project.
- Do not mint a claim code until the human is ready: once someone presses Continue to Neon, DATABASE_URL rotates and the project locks (even delete) for 15 minutes.
- Data API needs a JWT; get it from Neon Auth: POST {auth}/sign-up/email then GET {auth}/get-session and read the set-auth-jwt header. Run `neon data-api refresh-schema` after DDL.
- `neon config apply` will not overwrite existing branch settings without --update-existing.
- Commands that read the DB (inspect, databases create) need --role-name/--owner-name because Auth adds extra roles.
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessllms.txt (425 lines), every doc page as markdown (.md suffix), and https://neon.com/auth.md: an agent-specific guide to provisioning without signup. CLI ships the OpenAPI spec (neon api --list, 181 routes).
- Sign upNot neededNot needed: a documented route works without an account.
- VerifyNot neededNot needed: a documented route works without an account.
- KeyHeadlessDocumented no-account route (auth.md, Claimable Neon): `neon claim create` or POST claimable.neon.tech/v1/agent/identity -> claim token -> OAuth jwt-bearer access token -> database_url, Data API and Auth URLs. Temporary (72 h) and limited: most Management API routes return 403 'not available before claim'. A full account API key needs console sign-up.
- First callHeadlessneon branches list / neon projects get with the claimable credential.
- First actionHeadlessCreated a table and rows over the returned DATABASE_URL (PostgreSQL 17.11); signed up an app user in Managed Better Auth and did CRUD through the Data API.
- PayNot reachedFree plan is permanent, no card. Upgrades happen on the console Billing page (Stripe Checkout per docs); no plan/upgrade route in the 181-route OpenAPI spec (only spending_limit). No 402/x402/MPP/L402: unauthenticated /api/v2 calls return 401 JSON; x402./mpp./agents.neon.com do not resolve; no listing in x402 Bazaar or mpp.dev. Reaching the console needs an account, and account sign-up needs a human (Cloudflare interstitial). Nothing was paid.
- CancelNot neededNothing to cancel: our agent used the free plan.
- DeleteHeadlessPartly. Claimable project snowy-surf deleted via documented DELETE claimable.neon.tech/v1/projects/{id} -> 204 (its DB connection kept working ~1-2 min). The other project (odd-boat) could not be deleted: after we opened the claim page (no human accepted), CLI and REST delete returned 409 claim_in_progress, even after GET .../claim reported state expired. It will expire by itself on the 5 Oct 2026 MCP spec (72 h). No account existed, so there was no account to delete.
The attempt log · 50 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| Find docs: Find agent-facing docs | api | done ✓ | https://neon.com/llms.txt 200 text/plain (425 lines, md docs via .md suffix); https://neon.com/auth.md 200 text/markdown: no-signup claimable provisioning guide for agents; MCP OAuth metadata at mcp.neon.tech |
| Sign up for a Neon account: Open console sign-up in a real browser | browser | blocked | GET https://console.neon.tech/signup -> redirected to Keycloak registrations URL, title "Just a moment...", Cloudflare "Performing security verification" interstitial; did not clear after ~15s. |
| Get API credentials: Provision claimable project without account (auth.md) | cli | done ✓ | neon claim create (CLI 7.0.6) -> project [redacted], granted postgres/data-api/auth, denied object-storage/functions/ai-gateway (requires_claim); wrote DATABASE_URL etc. to .env.local; CLI stores claim identity locally |
| First API call: List branches and get project with claimable credential | cli | done ✓ | neon branches list -o json -> main br-sparkling-brook-b550ecj3 ready; neon projects get [redacted] -> pg_version 17, aws-us-east-2 |
| First real action: Create table and insert rows | cli | done ✓ | psql DATABASE_URL_UNPOOLED: CREATE TABLE notes; INSERT 0 2; select count(*) -> 2; PostgreSQL 17.11 |
| Create a serverless Postgres project and run SQL against it: Create project, create table, insert and read rows | cli | done ✓ | neon claim create -> project [redacted]; neon projects get returns it; psql: insert 2 rows, select count(*)=2 |
| Try Neon with no account via a temporary claimable project: Create claimable project and check status | cli | partial ✓ | neon claim create ok; neon claim status -> state unclaimed, reconciled false, expires 2026-10-05T20:50:58Z |
| Branch the database: Create branch dev from main | cli | blocked | neon branches create --name dev2 -> ERROR: This Neon Management API operation is not available before claim. (HTTP 403 route_not_allowed, origin proxy) |
| Branch from a past point in time: Create branch pitr --parent <timestamp before deletes> | cli | blocked | POST /projects/{id}/branches via neon branches create -> 403 route_not_allowed: not available before claim |
| Schema-only branches: neon branches create --schema-only | cli | blocked | same branch-create route: 403 not available before claim |
| Create databases and roles: neon databases create --name appdb --owner-name neondb_owner; neon roles create --name approle | cli | blocked | databases list works (neondb); databases create and roles create -> ERROR: This Neon Management API operation is not available before claim. First try without --owner-name gave clear error listing roles. |
| Snapshots: neon snapshots list | cli | blocked | ERROR: This Neon Management API operation is not available before claim. |
| Query logs: neon logs query --since 15m | cli | blocked | ERROR: This Neon Management API operation is not available before claim. |
| Inspect Postgres health: neon inspect db table-sizes and compare with pg_table_size | cli | done ✓ | neon inspect db table-sizes --role-name neondb_owner -> public.notes 16 kB; psql pg_table_size(notes)=16384. Without --role-name: clear error naming roles. |
| Autoscale compute / set size: Raise autoscaling max from 1 to 2 CU | cli | done ✓ | neon api /projects/[redacted]/endpoints/ep-fragrant-truth-b50js1mu -X PATCH autoscaling 0.25-2, suspend 60 -> 200; GET /projects/{id}/endpoints shows autoscaling_limit_max_cu 2 (was 1 per neon status). Compute restarted (open psql session terminated). |
| Install extensions: CREATE EXTENSION vector, postgis and use vector distance | cli | done ✓ | psql: pg_extension lists vector 0.8.0, postgis 3.5.7; select [1,2,3]<->[1,2,4] = 1 |
| Scoped credentials: List branch credentials | cli | partial ✓ | neon credentials list -> 2 default credentials (AI gateway invoke, storage read/write) |
| Managed authentication stored in Postgres: Sign up an app user via Managed Better Auth and get a JWT | api | done ✓ | POST $NEON_AUTH_BASE_URL/sign-up/email (inbox address) -> 200 user id 1f37d7fd...; GET /get-session -> set-auth-jwt header (JWT); psql: neon_auth.user has the row |
| Query and mutate tables over REST Data API: RLS todos table: POST, PATCH, GET, DELETE via Data API with Neon Auth JWT | api | done ✓ | POST /rest/v1/todos -> row with user_id from JWT sub; PATCH done=true; GET returns it; psql select matches; DELETE 204 -> count 0. neon data-api refresh-schema used after DDL. |
| Configure auth settings: neon neon-auth config email-password get/update | cli | blocked | neon neon-auth config email-password get -> ERROR: This Neon Management API operation is not available before claim. |
| Scoped credentials: Issue a storage:read credential | cli | blocked | neon credentials create --name agentdrives-storage-ro --scope storage:read -> ERROR: This Neon Management API operation is not available before claim. |
| Try Neon with no account via a temporary claimable project: Provision via documented REST route: identity -> token -> credentials | api | partial ✓ | POST https://claimable.neon.tech/v1/agent/identity -> 201 project snowy-surf-00789318, granted postgres+data_api; POST /v1/oauth2/token jwt-bearer -> access_token 3600s; GET /v1/projects/{id}/credentials -> database_url + data_api url; psql create table ok |
| Scale to zero when idle and wake on connection: Set suspend_timeout 60s, wait idle, then query | cli | done ✓ | GET /projects/{id}/endpoints at 20:59:22: current_state idle, suspended_at 20:59:01 (last_active 20:56:15); psql query then returned rows in 1.55s and endpoints list shows current_state active |
| Declare backend as code (neon.ts) and apply: Change default-branch compute settings in neon.ts and apply | cli | done ✓ | neon config plan showed diff; neon config apply -y refused with clear error: Branch settings conflict ... Re-run with --update-existing; with --update-existing applied; neon config status shows autoscalingLimitMaxCu 1, suspendTimeout 5m |
| Authenticated API passthrough: neon api GET/PATCH /projects/{id}/endpoints | cli | done ✓ | neon api /projects/[redacted]/endpoints returned endpoint JSON; PATCH changed autoscaling and read back via list. Pre-claim the passthrough goes through claimable proxy; many routes 403 route_not_allowed (GET single endpoint, branches POST). |
| Scaffold from starter template: neon bootstrap bootapp --template hono -y --no-install | cli | partial ✓ | Directory bootapp created with neon.ts, src/, AGENTS.md, drizzle.config.ts, git initialized, Claude plugin installed; summary says Project: not linked |
| Instant restore: POST /projects/{id}/branches/{id}/restore to timestamp before deletes | cli | blocked | neon api ... /restore -X POST -> ERROR: This Neon Management API operation is not available before claim. |
| Delete a branch: Create then delete a dev branch | cli | blocked | Branch create is not available before claim (403 route_not_allowed), so there is no non-default branch to delete. |
| Reset branch / TTL: Create branch with --expires-at | cli | blocked | branch create route 403 not available before claim |
| Schema diff: GET compare_schema / neon diff | cli | blocked | neon api /projects/{id}/branches/{id}/compare_schema -> not available before claim; neon diff main -> Nothing to compare (only one branch exists) |
| Read replicas: POST /projects/{id}/endpoints type read_only | cli | blocked | ERROR: This Neon Management API operation is not available before claim. |
| Configure history retention: PATCH /projects/{id} history_retention_seconds=3600 | cli | blocked | ERROR: This Neon Management API operation is not available before claim. |
| Deploy serverless function: neon functions list / claim create --service functions | cli | blocked | claim create: functions denied requires_claim ("Deploying functions needs a claimed project. neon dev runs functions locally"); neon functions list -> ERROR: functions requires a claimed project. |
| Object storage buckets: neon buckets list / claim create --service object-storage | cli | blocked | object-storage denied requires_claim; neon buckets list -> ERROR: storage requires a claimed project. |
| Presigned URLs / multipart: needs a bucket | cli | blocked | Object storage requires a claimed project (see) |
| Function triggers: needs a deployed function | cli | blocked | Functions require a claimed project (see) |
| Custom domain on function: needs a deployed function | cli | blocked | Functions require a claimed project (see) |
| Git branch sync: neon git sync needs branch creation | cli | blocked | Branch creation not available before claim (403 route_not_allowed) |
| Manage API keys: neon api-keys list | cli | blocked | ERROR: No route exists at this path. (claimable credential has no account; API keys need console sign-up behind Cloudflare) |
| Organizations: neon orgs list | cli | blocked | ERROR: No route exists at this path. |
| AI Gateway: claim create --service ai-gateway | cli | plan_gated | ai-gateway denied requires_claim; pricing.md: AI Gateway = prepaid credits on Launch/Scale ("-" on Free) |
| IP allowlist: not attempted beyond pricing | none | plan_gated | capabilities map plan: paid; IP Allow is a paid-plan feature; account needed |
| Protected branches: neon branches create --protected | cli | plan_gated | CLI help: --protected ... Paid plans only. |
| Spending notifications: not attempted | none | plan_gated | paid plan feature; /organizations/{org_id}/billing/spending_limit needs an account org |
| Buy AI Gateway credits: not attempted | none | plan_gated | pricing.md: prepaid credits on paid plans; no payment allowed |
| Sign up for a Neon account: Reach the sign-up form via the normal login page (claim flow -> Log in -> Sign up for an account) | browser | blocked | Keycloak login page (console.neon.tech/realms/prod-realm/.../auth) loaded without a challenge; clicking Sign up for an account -> /login-actions/registration shows Cloudflare Performing security verification interstitial (title Just a moment...). Not retried. |
| Try Neon with no account via a temporary claimable project: neon claim accept --no-open and follow verification URL | cli | partial ✓ | claim accept -> user code + https://claimable.neon.tech/claim?user_code=...; page Claim a Neon project -> Continue to Neon -> Neon login page (needs a Neon account). Account sign-up blocked by Cloudflare interstitial; claim not completed. |
| Delete project/data: Delete claimable project snowy-surf-00789318 via documented REST | api | done ✓ | DELETE https://claimable.neon.tech/v1/projects/snowy-surf-00789318 -> 204; access token then 401 This access token was revoked; token re-exchange -> 400 invalid_grant Identity assertion was revoked |
| Delete project/data: neon claim delete -y on [redacted] | cli | failed ✓ | ERROR: This project is being claimed. Only claim-status polling is available. neon claim status -> state pending, claim_expires_at 21:16:22Z. neon claim list still shows unclaimed (stale local record). |
| Delete project/data: Delete [redacted] after the claim window expired (CLI and REST) | api | failed ✓ | 21:16:36 neon claim status -> state expired; neon claim delete -y -> This project is being claimed. GET /v1/projects/{id}/claim -> 200 {"state":"expired"}; DELETE /v1/projects/{id} at 21:17 and 21:18 -> 409 claim_in_progress, claim_state pending |
Also in Databases.
AirtableL4Gets in on its ownNeon vs Airtable
NocoDBL4Gets in on its ownNeon vs NocoDB
ConvexL3Gets in on its ownNeon vs Convex
PlanetScaleL2Gets in on its ownNeon vs PlanetScale