Can an AI agent use Turso?
As of 6 Oct 2026, an AI agent can't use Turso on its own: Cloudflare Turnstile on the sign-up form.
- Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
- Access: Can't sign up.
- Use: Work not reached.
- Pay: Payment not reached.
- Leave: Leaving not reached.
To reach L2 · Gets in: let an agent sign up on its own.
With an account set up by a person: not measured yet.
What the levels meanDriven 6 Oct 2026Same level in 2 drives in a rowRules 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 serverTurned away when they send the sign-up form.
- Signed agentsThe sign-up page opens. The check on the form still applies.
- 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 Turso.
On its own
- Read all of the product's documentation in machine-friendly formats
- Run a local database on its own machine with no account needed: tables, searches, vector similarity, and change tracking all worked
What it can't, and why
- Create a cloud accountthe sign-up form shows a human verification check the agent cannot pass
- Create, manage, or pay for a hosted cloud databaseall of this needs the account that sign-up blocks
Can an AI agent sign up for Turso on its own?
No. Sign-up: needs a human. No API or CLI sign-up: `turso auth signup --headless` only prints a URL to the Clerk web form. In the browser, Continue (email/password) and 'Sign in with AgentID' both swap the form for a visible Cloudflare Turnstile 'Verify you are human'.
Does Turso have an MCP server, and can an agent connect to it?
Yes. Turso has an official MCP server.
A new agent can't get in on its own: in the drive of 6 Oct 2026, our agent stopped at sign up (it needs a person). Through the MCP server, 0 of our agent's 1 attempt worked.
What the drive found
APIOpenAPIMCP · officialCLISDKllms.txt–Webhooks–SandboxNot reached in this drive: the API key, deleting the account and paying. Every checkpoint, in detail
For the team behind Turso.
Where agents stop in Turso today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Let verified agents sign up without TurnstileStep-by-step guide
- Add a device flow to CLI and MCP loginStep-by-step guide
- Document the 'Sign in with AgentID' option
4 more fixes
- Say what is missing on a 401
- Document the experimental flag for FTS
- Add account deletion to the API or CLI
- Serve the MCP server card at the endpoint 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.
Our agent couldn't get into Turso, so the work, its reliability and the crash test aren't measured. The part scores are what it could judge from the outside.
Part scores · level history
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).
Level history
- 2 Oct 2026L1Needs a person
- 6 Oct 2026L1Needs a person
For agents and builders.
The drive as data, every checkpoint and all 48 attempts.
How an agent connects · 5 tips
/api/tools/turso.json/tools/turso.mdMCP get_tool {"slug":"turso"}
- Read docs as Markdown: append .md to any docs.turso.tech page or send Accept: text/markdown; llms.txt lists them all.
- The embedded engine needs no account: npm i @tursodatabase/database and connect('file.db').
- FTS indexes need connect(path, {experimental: ['index_method']}) in the JS SDK 0.8.2.
- Cloud access needs a human to sign up (Turnstile) and log in once; then use `turso auth api-tokens mint` for a Platform API token.
- The hosted MCP server (https://mcp.turso.ai/mcp) uses OAuth with CIMD; there is no device flow.
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessdocs.turso.tech: llms.txt, .md pages, Accept: text/markdown; OpenAPI 3.0.1 at turso.tech/openapi.json; MCP card at turso.tech/.well-known/mcp
- Sign upNeeds a humanNo API or CLI sign-up: `turso auth signup --headless` only prints a URL to the Clerk web form. In the browser, Continue (email/password) and 'Sign in with AgentID' both swap the form for a visible Cloudflare Turnstile 'Verify you are human'.
- VerifyNot reachedNot reached: sign-up stopped at Turnstile before any mail was requested
- KeyNot reachedNo account. `turso auth login --headless` prints a URL and exits; MCP OAuth is authorization_code + PKCE only (no device grant)
- First callNot reachedEvery Platform API path answers 401 {"error":"token contains an invalid number of segments"} without a token; MCP endpoint 401 with resource_metadata
- First actionNot reachedCould not create a cloud database (no account). The embedded engine runs locally through the official SDK with no account (see coverage)
- PayNot reachedNo 402 anywhere (API answers 401); x402./mpp./agents.turso.tech do not resolve; no x-payment-info, no /.well-known/ucp; not in x402 Bazaar or mpp.dev. projects.dev (Stripe Projects) lists a 'turso/database' provider: a listing only, not confirmed. From the CLI docs ('add your credit card details to your account before you can upgrade'); where the card is added was not seen.
- CancelNot reachedNo plan started. Docs: `turso plan select` switches plan from the CLI (not exercised)
- DeleteNot reachedNo account was created. Docs have `turso org destroy` for orgs, and say a personal account cannot be destroyed that way. No account-deletion API or CLI command was found in the docs
The attempt log · 48 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| Agent discovery: robots.txt + Content-Usage | api | done ✓ | turso.tech/robots.txt: User-agent * Disallow /api.turso.tech/ /app/ /turso-soc2.pdf, no Content-Usage. docs.turso.tech/robots.txt: 'Content-Signal: ai-train=yes, search=yes, ai-input=yes' (Cloudflare Content Signals scheme, parses yes/no). No Content-Usage header on turso.tech |
| Agent discovery: llms.txt | api | done ✓ | https://turso.tech/llms.txt 200 text/plain (H1 '# Turso'); https://docs.turso.tech/llms.txt 200 listing .md pages |
| Agent discovery: Markdown docs | api | done ✓ | GET docs.turso.tech/introduction with Accept: text/markdown -> content-type text/markdown, vary includes Accept; .md URLs (e.g. /cli/auth/login.md) serve markdown |
| Agent discovery: OpenAPI | api | done ✓ | https://turso.tech/openapi.json 200 application/json, openapi: 3.0.1, 40 paths / 53 operations; no x-payment-info/x-service-info |
| Agent discovery: MCP discovery cards | api | partial ✓ | turso.tech/.well-known/mcp 200 JSON (endpoint https://mcp.turso.ai/mcp, oauth2). turso.tech/.well-known/ai-catalog.json 404; mcp.turso.ai/mcp/server-card 404 JSON route_not_found. docs.turso.tech/.well-known/mcp/server-card.json 200 (Docs MCP, Mintlify). docs.turso.tech/.well-known/agent-card.json 200 JSON protocolVersion 0.3. turso.tech/.well-known/agent-card.json 404 HTML |
| Agent discovery: MCP server/discover on mcp.turso.ai/mcp | api | blocked ✓ | POST server/discover (2026-07-28 headers) -> HTTP 401, WWW-Authenticate: Bearer resource_metadata="https://mcp.turso.ai/.well-known/oauth-protected-resource/mcp", body {"error":"token contains an invalid number of segments"}. PRM 200 (authorization_servers https://api.turso.tech). AS metadata: client_id_metadata_document_supported true, registration_endpoint present, grant authorization_code only, S256 |
| Sign up: Create a Turso account headless via CLI | cli | blocked ✓ | turso auth signup --headless (CLI v1.0.33) only prints 'Visit the following URL to login: https://api.turso.tech/signup?redirect=false' and exits 0; URL 302 -> /auth/clerk -> app.turso.tech Clerk web form. No API/CLI sign-up, no device flow. |
| Sign up: Create account in browser on app.turso.tech/signup (Clerk form) | browser | blocked ✓ | Filled First name AgentDrives, Last name Test, username, email, password, clicked Continue -> form replaced by Cloudflare Turnstile widget 'Verify you are human' (screenshot browser/shots/003.png). Not solved by us. |
| Store and query vector embeddings: Store 3 embeddings in F32_BLOB column and find nearest neighbours | sdk | done ✓ | CREATE TABLE docs(... emb F32_BLOB(3)); INSERT vector32(...); SELECT ... ORDER BY vector_distance_cos(emb, vector32('[1,0,0]')) -> cat (4.5e-8), dog (0.0061) |
| Create and query a full-text search index (BM25 ranking): Create FTS index on articles and rank matches for 'database' | sdk | failed ✓ | connect('local.db') then CREATE INDEX idx_art ON articles USING fts (title, body) -> 'Parse error: index method is an experimental feature. Enable with --experimental-index-method flag'; fts_match then returned rows with fts_score 0 |
| Create and query a full-text search index (BM25 ranking): Retry with connect(path, {experimental:['index_method']}) | sdk | done ✓ | CREATE INDEX ... USING fts ok; SELECT title, fts_score(title, body,'database') ... WHERE fts_match(...) ORDER BY s DESC -> 'SQLite tips' 0.508, 'Cooking' 0.373 |
| Enable Change Data Capture: PRAGMA capture_data_changes_conn('full'), insert/update/delete a row, read turso_cdc | sdk | done ✓ | turso_cdc rows for table users: change_type 1 (insert, after {id:1,name:alice}), 0 (update, after alice2), -1 (delete) |
| Sign up: Sign up with 'Sign in with AgentID' (Clerk custom provider) on app.turso.tech/signup | browser | blocked ✓ | Clicked .cl-socialButtonsIconButton__custom_agentid -> same Cloudflare Turnstile 'Verify you are human' widget before any redirect (browser/shots/008.png) |
| Run SQL queries, writes, and schema changes: Create table, insert, update, ALTER TABLE ADD COLUMN, select, reopen file | sdk | done ✓ | SELECT * FROM notes -> [{id:1, body:'edited', tag:'t1'}]; sqlite_schema shows ALTER applied; count 1 after reopening app.db |
| Connect an application via a client SDK: npm i @tursodatabase/database; connect('app.db'); query rows | sdk | done ✓ | connect + prepare.all returned rows (see attempt); follows docs.turso.tech/connect/javascript.md quickstart verbatim |
| Create a database: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Delete a database: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Branch a database from an existing database or point-in-time snapshot: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Restore a database to an earlier point in time: Attempt via mcp | mcp | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Recover a deleted database or group: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Create and manage a group (replicated location set) for databases: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Sync a local embedded database with Turso Cloud (push/pull): Attempt via sdk | sdk | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Create a scoped database/group authorization token: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Invalidate all auth tokens for a database or group: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Restrict database access with IP/CIDR/AWS VPC allow rules: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Encrypt a database at rest with a customer-supplied (BYOK) key: Attempt via none | none | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Import an existing SQLite database into Turso: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Export a database to a SQLite file: Attempt via cli | cli | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| View per-database usage (rows read/written, storage, syncs): Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| View top queries / query stats (rows read and written per query): Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| View organization-wide audit logs: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| List and inspect database replica instances by region: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| List available deployment locations / find closest region: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Invite and manage organization members and roles: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Create and switch between organizations: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| View and change subscription plan: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Enable/disable usage overages and view invoices: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Mint and revoke personal API tokens: Attempt via api | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Deploy a private network endpoint (AWS PrivateLink) for a database: Attempt via none | none | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Find docs: Find docs, OpenAPI, llms.txt, MCP card | api | done ✓ | docs.turso.tech llms.txt + .md pages, Accept text/markdown; turso.tech/openapi.json (3.0.1); turso.tech/.well-known/mcp |
| Verify email: Verify the sign-up email | none | blocked | Never reached: sign-up form stopped at Cloudflare Turnstile; no mail requested |
| Get API credentials: turso auth login --headless, then platform token | cli | blocked ✓ | turso auth login --headless prints 'Visit the following URL to login: https://api.turso.tech?redirect=false' and exits; turso db list -> 'You are not logged in, please login with turso auth login'. MCP OAuth: authorization_code + PKCE only (no device grant) via app.turso.tech/oauth/mcp/authorize, which needs an account. |
| First API call: GET /v1/organizations without credentials | api | blocked ✓ | GET https://api.turso.tech/v1/organizations -> 401 application/json {"error":"token contains an invalid number of segments"} (also /v1/locations) |
| First real action: Create a cloud database | api | blocked | Blocked: no Turso Cloud account. Sign-up is web-only (Clerk) behind a visible Cloudflare Turnstile. Platform API answers 401 {"error":"token contains an invalid number of segments"} without a token. |
| Pay step: Probe agent payment rails | api | done ✓ | 401 (not 402) on /v1/organizations/x/subscription and /invoices without token; x402./mpp./agents.turso.tech do not resolve (curl 000); /.well-known/ucp 404 JSON; no x-payment-info in openapi.json; Coinbase x402 Bazaar and mpp.dev/api/services: no 'turso'; projects.dev (Stripe Projects) catalog lists provider slug 'turso/database' (listing only, not confirmed); docs llms-full.txt: no x402/MPP/Stripe/checkout; docs cli/plan/select & cli/plan/upgrade: 'You will need to add your credit card details to your account before you can upgrade to a paid plan.' Pricing: Free $0/month, 'Start free, no credit card required.' |
| Cancel: Downgrade plan | cli | skipped | No plan started (no account). Docs: turso plan select switches plan from the CLI. |
| Delete account: Delete account and data | cli | blocked | No account created. Docs: turso org destroy deletes an org you own but 'Users cannot also destroy the a personal account or active organization'; no account-deletion command or API found in llms-full.txt (searched 'delete account', 'account deletion'). |
| Agent discovery: Docs MCP server/discover | mcp | done ✓ | POST https://turso.main-kill-isr.mintlify.me/mcp server/discover -> 200 supportedVersions ["2026-07-28"] (Mintlify docs MCP, search tools; from docs.turso.tech/.well-known/mcp/server-card.json) |
Also in Databases.
AirtableL4Gets in on its ownTurso vs Airtable
NocoDBL4Gets in on its ownTurso vs NocoDB
ConvexL3Gets in on its ownTurso vs Convex
NeonL2Gets in on its ownTurso vs Neon