{
 "slug": "planetscale",
 "name": "PlanetScale",
 "url": "https://planetscale.com",
 "domain": "planetscale.com",
 "category": "databases",
 "category_name": "Databases",
 "tested_at": "2026-10-02",
 "run": "20261002T213446Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261002T213446Z",
   "date": "2026-10-02",
   "level": 2,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": null,
    "robots": "start"
   },
   "drives": 2
  }
 ],
 "level": 2,
 "level_name": "Gets in",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 2,
  "tries": 2,
  "self_start": true
 },
 "badges": [
  "agent-can-leave"
 ],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up by email"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Most of the core needs a paid plan, so the work is not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Card checkout",
   "value": "not_tried",
   "route": "card_checkout",
   "why": "no_card"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up by email",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Most of the core needs a paid plan, so the work is not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Card checkout",
   "value": "not_tried",
   "route": "card_checkout",
   "why": "no_card",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "email_signup",
   "label": "Sign-up by email",
   "routes": [],
   "minutes": 2.5,
   "core": null
  }
 ],
 "minutes": 2.5,
 "next": {
  "to": 3,
  "text": "Next: let a trial or free plan reach the core features"
 },
 "stop": "first_action",
 "core": "0/0",
 "scores": {
  "coverage": 20,
  "reliability": 75,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": []
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": null,
  "kb_version": null,
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": null,
  "robots": "start"
 },
 "same_level_drives": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": true,
 "profiles": {},
 "agent_check": null,
 "agent_pass": {
  "rung": "signup",
  "vendor": "hidden honeypot field (telephone)",
  "signed": true
 },
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "robots",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": "closed",
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "docs/llms.txt (23.5 KB), .md twin of every page, an agent setup prompt (docs/agent-setup/prompt.md), OpenAPI at /docs/openapi.yaml (280 operations), pscale agent-guide --format json."
  },
  "signup": {
   "status": "headless",
   "note": "Public sign-up form at auth.planetscale.com/sign-up posted with curl (email, password, ToS). No CAPTCHA, no phone, signed datacenter agent let through. It is a web form, not an API."
  },
  "verify": {
   "status": "headless",
   "note": "Verification mail arrived within seconds; opening the confirmation link with curl was enough."
  },
  "credentials": {
   "status": "headless",
   "note": "pscale auth login --format json starts an OAuth device flow; we approved the device code by posting the auth.planetscale.com/oauth/device form with our session cookie. Then pscale service-token create gave an API/MCP token."
  },
  "first_call": {
   "status": "headless",
   "note": "pscale org list --format json and GET api.planetscale.com/v1/organizations with the service token returned org an inbox; MCP tools/list returned 25 tools."
  },
  "first_action": {
   "status": "blocked",
   "note": "Creating a database (CLI, API) returns 422 'We were unable to verify your credit card. Please add your payment information.' No free plan; cheapest is single-node Postgres from $5/mo. MCP has no create-database tool."
  },
  "pay": {
   "status": "",
   "grade": "P2",
   "rails": [
    "Stripe Checkout (setup mode) via pscale billing payment-method update / MCP planetscale_update_payment_method",
    "Stripe Projects (developer preview, listed, not tried)",
    "Cloudflare dashboard billing"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "none",
   "note": "No x402/MPP/L402: api.planetscale.com answers 401 JSON, x402./mpp./agents. subdomains do not resolve, no /.well-known/ucp, no x-payment-info in OpenAPI, nothing in Bazaar or mpp.dev. CLI and MCP return a Stripe Checkout URL to attach a card; we stopped there (no card). Once a card is attached, creating and resizing paid databases is headless via CLI/API, so with a card this would be. Stripe Projects lists planetscale/postgresql but is a developer preview behind an access request."
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent started no paid plan.",
   "docs_note": "Nothing was started. Billing is per database; pscale database delete and pscale billing payment-method delete (and API equivalents) are documented, so stopping charges is headless. Not exercised.",
   "docs_grade": "",
   "nothing": "no_plan"
  },
  "delete": {
   "status": "browser",
   "note": "No delete-account or delete-org route in the API (OpenAPI) or CLI. Web UI Settings > Account > Delete account: type email, re-enter password (confirm-access), done. Verified: CLI token expired, password sign-in fails.",
   "left": "deleted",
   "account": true
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-02",
  "source": "drive",
  "options": [
   {
    "id": "stripe-checkout",
    "name": "Stripe Checkout",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   },
   {
    "id": "stripe-projects",
    "name": "Stripe Projects",
    "kind": "agent-rail",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   },
   {
    "id": "cloud-marketplace",
    "name": "Cloud marketplace billing",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [
   "stripe-projects"
  ],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "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."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST at api.planetscale.com/v1, service-token auth 'Authorization: <id>:<token>', clear JSON errors",
  "openapi": "/docs/openapi.yaml, 280 operations; no account/org delete",
  "cli": "pscale 0.341.0, single static binary; --format json everywhere with status/issues/next_steps; agent-guide command",
  "mcp": "official hosted (mcp.pscale.dev, Gram), OAuth with dynamic client registration or service-token Bearer; 25 tools: read/write SQL, insights, logs, billing; no create/delete database",
  "llms_txt": "planetscale.com/docs/llms.txt plus per-engine bundles"
 },
 "can_do": [
  "Sign up, verify email and log the CLI in without a browser (form posts + OAuth device code)",
  "Create, scope, use and delete service tokens for the API and MCP server",
  "Connect to the hosted MCP server with a service token and call its tools",
  "Create a team, add a member, and delete the team via CLI",
  "Read the organization audit log, members, regions, cluster sizes and invoices via CLI",
  "Measure latency to PlanetScale regions with pscale ping",
  "Get a Stripe Checkout link to attach a card via CLI or MCP"
 ],
 "cannot_do": [
  {
   "what": "Create any database (and so branches, SQL, deploy requests, replicas, backups, insights)",
   "why": "No free plan: database creation requires a verified card on file"
  },
  {
   "what": "Pay without a human card holder",
   "why": "Only rail is a Stripe Checkout card form; no agent-native payment rail"
  },
  {
   "what": "Delete the account headless",
   "why": "Only in the web UI (with a password re-confirm); no API or CLI route"
  }
 ],
 "blockers": [
  "Database creation requires a card on file (422 'We were unable to verify your credit card')"
 ],
 "tips_for_owner": [
  "Offer a card-free starter database for agents",
  "Accept an agent-native payment rail",
  "Add an account/org delete endpoint",
  "Clean JSX out of MCP docs-search snippets"
 ],
 "tips_for_agents": [
  "Install the pscale binary from GitHub releases and always pass --format json: every error comes back with issues and next_steps.",
  "pscale auth login --format json prints a device URL and code; the human (or a logged-in session) approves it once; then create a service token for everything else.",
  "Service tokens: REST uses 'Authorization: <id>:<token>'; the MCP server wants 'Authorization: Bearer <token>' (secret only).",
  "Grant service-token access explicitly (pscale service-token add-access) or calls fail.",
  "There is no free plan: ask your human to attach a card first (pscale billing payment-method update gives a Stripe Checkout URL), or use Stripe Projects if you have preview access.",
  "pscale org team create needs --name; a positional name is rejected."
 ],
 "selfhost": null,
 "summary": "An agent gets into PlanetScale entirely headless: sign-up form without CAPTCHA, email verification, CLI device login, service tokens, REST API and a 25-tool hosted MCP server, all with unusually agent-friendly JSON errors and an agent setup guide. The wall is the first real action: there is no free plan, so creating a database (and with it every core capability) needs a card attached through Stripe Checkout. Account deletion works only in the web UI.",
 "wall": "No free plan: database needs a card",
 "plan_scope": "none (no free access)",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "PlanetScale is a hosted database platform (Postgres/Vitess) built for signing up, authenticating and connecting entirely without a browser. An agent on its own got all the way through sign-up, email verification, CLI login and API/MCP access, but could not actually create a database because PlanetScale has no free tier and requires a verified credit card.",
  "can_do": [
   "Sign up, confirm the account, and log in a command-line tool without ever opening a browser.",
   "Create API keys and connect to the official AI-agent interface (MCP) to run commands.",
   "Create and remove teams and members, and view billing and audit history.",
   "Get a payment link to add a credit card, but not complete payment without a human's card."
  ],
  "cannot_do": [
   {
    "what": "Create a database, and therefore use almost every feature (branching, running queries, backups, scaling)",
    "why": "No free plan exists; a credit card must be attached first"
   },
   {
    "what": "Pay for the service on its own",
    "why": "Only payment option is a human filling out a card form"
   },
   {
    "what": "Delete its own account without a browser",
    "why": "Account deletion only exists in the website, not the command-line tool or API"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Create a database",
   "plan": "Base (card on file), from $5/mo single-node Postgres",
   "evidence": "POST /v1/organizations/an inbox/databases -> 422 'We were unable to verify your credit card. Please add your payment information.'; docs: 'PlanetScale does not offer a free plan'"
  },
  {
   "capability": "Create a branch",
   "plan": "Base",
   "evidence": "needs a database; pscale branch create -> 'source database agentdrives-test does not exist'"
  },
  {
   "capability": "Deploy request",
   "plan": "Base",
   "evidence": "needs a database (wall)"
  },
  {
   "capability": "Revert schema change",
   "plan": "Base",
   "evidence": "needs a database (wall)"
  },
  {
   "capability": "Run SQL",
   "plan": "Base",
   "evidence": "pscale sql -> 'database lookup: Not Found'; needs a database"
  },
  {
   "capability": "Read replicas",
   "plan": "Base",
   "evidence": "needs a database (wall)"
  },
  {
   "capability": "Resize cluster",
   "plan": "Base",
   "evidence": "needs a database (wall)"
  },
  {
   "capability": "Sharding",
   "plan": "Base",
   "evidence": "needs a database (wall)"
  },
  {
   "capability": "Promote branch",
   "plan": "Base",
   "evidence": "needs a database (wall)"
  },
  {
   "capability": "..(backups, insights, metrics, logs, inspect, passwords/roles, IP restrictions, private links, PgBouncer, traffic control, webhooks, imports, CDC, extensions, Neki)",
   "plan": "Base",
   "evidence": "all scoped to a database; database creation needs a card"
  },
  {
   "capability": "SSO",
   "plan": "Base + SSO add-on ($199/mo)",
   "evidence": "docs planetscale-plans; not attempted"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Database lifecycle",
   "capability": "Create a database",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /organizations/{org}/databases",
    "mcp": "planetscale_create_database (implied by OAuth full-access scope)",
    "cli": "pscale database create",
    "ui": "Dashboard > New database"
   },
   "check": "GET /organizations/{org}/databases/{database} returns the new database with state ready",
   "source": "https://planetscale.com/docs/cli#available-commands; https://planetscale.com/docs/planetscale-plans"
  },
  {
   "id": "cap-02",
   "group": "Branching",
   "capability": "Create a branch for isolated schema/data development",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /organizations/{org}/databases/{database}/branches",
    "mcp": null,
    "cli": "pscale branch create",
    "ui": "Dashboard > database > Branches > New branch"
   },
   "check": "pscale branch show <branch> --format json reports the branch as ready",
   "source": "https://planetscale.com/docs/cli#available-commands; https://planetscale.com/docs/postgres/branching"
  },
  {
   "id": "cap-03",
   "group": "Schema changes",
   "capability": "Deploy an online, zero-downtime schema change via a reviewable deploy request",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /organizations/{org}/databases/{database}/deploy-requests",
    "mcp": null,
    "cli": "pscale deploy-request create / deploy",
    "ui": "Dashboard > database > Deploy requests"
   },
   "check": "pscale deploy-request show <number> --format json shows state complete and branch schema matches",
   "source": "https://planetscale.com/docs/vitess/schema-changes/deploy-requests; https://planetscale.com/docs/cli#available-commands"
  },
  {
   "id": "cap-04",
   "group": "Schema changes",
   "capability": "Revert a deployed schema change with no downtime or data loss",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /organizations/{org}/databases/{database}/deploy-requests/{number}/revert",
    "mcp": null,
    "cli": "pscale deploy-request revert",
    "ui": "Dashboard > Deploy requests > Revert"
   },
   "check": "pscale deploy-request show <number> --format json shows a completed revert and the branch schema reverted",
   "source": "https://planetscale.com/blog/behind-the-scenes-how-schema-reverts-work; https://planetscale.com/docs/vitess/schema-changes/deploy-requests#revert-a-schema-change"
  },
  {
   "id": "cap-05",
   "group": "Querying",
   "capability": "Run SQL against a branch (interactive shell or non-interactive query)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale shell / pscale sql",
    "mcp": "planetscale_execute_read_query / planetscale_execute_write_query",
    "ui": "Dashboard > branch > Console"
   },
   "check": "pscale sql <database> <branch> --query 'SELECT 1' --format json returns a result row",
   "source": "https://planetscale.com/docs/cli#available-commands; https://planetscale.com/docs/mcp-server"
  },
  {
   "id": "cap-06",
   "group": "Scaling",
   "capability": "Scale read traffic with replicas",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET /organizations/{org}/databases/{database}/branches/{branch}",
    "mcp": null,
    "cli": "pscale read-only-replica create (Postgres)",
    "ui": "Dashboard > branch > Replicas"
   },
   "check": "pscale read-only-replica list --format json shows the new replica in state ready",
   "source": "https://planetscale.com/docs/postgres/scaling/replicas; https://planetscale.com/docs/vitess/scaling/replicas"
  },
  {
   "id": "cap-07",
   "group": "Scaling",
   "capability": "Resize a branch's cluster (compute/memory)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /organizations/{org}/databases/{database}/branches/{branch}/resize",
    "mcp": null,
    "cli": "pscale branch resize",
    "ui": "Dashboard > branch > Settings > Resize"
   },
   "check": "pscale branch show <branch> --format json reports the new cluster size after the resize completes",
   "source": "https://planetscale.com/docs/plans/cluster-sizing#upsizing-and-downsizing-clusters; https://planetscale.com/docs/cli#available-commands"
  },
  {
   "id": "cap-08",
   "group": "Sharding",
   "capability": "Horizontally shard a database (explicit sharding workflow)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale keyspace create / pscale branch shard",
    "mcp": null,
    "ui": "Dashboard > database > Sharding"
   },
   "check": "pscale keyspace show <keyspace> --format json reports the configured shard count",
   "source": "https://planetscale.com/docs/vitess/sharding/sharding-quickstart; https://planetscale.com/docs/neki/data-topology"
  },
  {
   "id": "cap-09",
   "group": "Branching",
   "capability": "Promote a development branch to production / switch over traffic",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /organizations/{org}/databases/{database}/branches/{branch}/promote",
    "mcp": null,
    "cli": "pscale branch promote / pscale branch switchover",
    "ui": "Dashboard > branch > Promote"
   },
   "check": "pscale branch show <branch> --format json shows production: true",
   "source": "https://planetscale.com/docs/cli#available-commands; https://planetscale.com/docs/vitess/schema-changes/branching"
  },
  {
   "id": "cap-10",
   "group": "Backups",
   "capability": "Create and restore branch backups",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /organizations/{org}/databases/{database}/branches/{branch}/backups",
    "mcp": null,
    "cli": "pscale backup create / pscale backup restore",
    "ui": "Dashboard > branch > Backups"
   },
   "check": "pscale backup show <id> --format json shows state complete, and a restored branch contains the backed-up data",
   "source": "https://planetscale.com/docs/vitess/backups; https://planetscale.com/docs/postgres/backups; https://planetscale.com/docs/neki/backups"
  },
  {
   "id": "cap-11",
   "group": "Backups",
   "capability": "Restore a Postgres branch to a specific point in time",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale backup restore",
    "mcp": null,
    "ui": "Dashboard > branch > Backups > Point-in-time recovery"
   },
   "check": "The restored branch's data reflects the chosen timestamp rather than the latest state",
   "source": "https://planetscale.com/docs/postgres/backups/point-in-time-recovery"
  },
  {
   "id": "cap-12",
   "group": "Observability",
   "capability": "View query insights (slow/expensive queries from production traffic)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale insights queries / queries show / queries summary",
    "mcp": "planetscale_query_insights (insights-only server)",
    "ui": "Dashboard > branch > Insights"
   },
   "check": "pscale insights queries --format json returns recorded query rows with latency and counts",
   "source": "https://planetscale.com/docs/vitess/monitoring/query-insights; https://planetscale.com/docs/mcp-server"
  },
  {
   "id": "cap-13",
   "group": "Observability",
   "capability": "View anomaly detection and automated schema recommendations",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale insights anomalies / pscale insights recommendations",
    "mcp": "Schema Recommendations (insights-only server)",
    "ui": "Dashboard > branch > Insights > Recommendations"
   },
   "check": "pscale insights recommendations --format json lists a recommendation; dismissing it via 'recommendations dismiss' removes it from the active list",
   "source": "https://planetscale.com/docs/cli#available-commands; https://planetscale.com/docs/mcp-server"
  },
  {
   "id": "cap-14",
   "group": "Observability",
   "capability": "Query historical and live branch metrics (CPU, connections, QPS, etc.)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale metrics instant / queries / tables / tablets",
    "mcp": null,
    "ui": "Dashboard > branch > Metrics"
   },
   "check": "pscale metrics queries --format json returns a time series of query counts",
   "source": "https://planetscale.com/docs/cli#available-commands"
  },
  {
   "id": "cap-15",
   "group": "Observability",
   "capability": "Query recent Postgres/Neki branch logs",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale logs <database> <branch>",
    "mcp": null,
    "ui": "Dashboard > branch > Logs"
   },
   "check": "pscale logs <database> <branch> --format json returns recent log entries",
   "source": "https://planetscale.com/docs/postgres/monitoring/logs; https://planetscale.com/docs/neki/monitoring/logs"
  },
  {
   "id": "cap-16",
   "group": "Observability",
   "capability": "Run live read-only diagnostic checks (bloat, locks, unused indexes, long-running queries)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale inspect all / table-sizes / locks / long-running-queries / bloat / unused-indexes",
    "mcp": null,
    "ui": null
   },
   "check": "pscale inspect long-running-queries --format json lists currently running queries over the threshold",
   "source": "https://planetscale.com/docs/cli#available-commands"
  },
  {
   "id": "cap-17",
   "group": "Connectivity",
   "capability": "Manage database credentials (passwords/roles) for connecting",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /organizations/{org}/databases/{database}/branches/{branch}/passwords",
    "mcp": null,
    "cli": "pscale password create (Vitess) / pscale role create (Postgres, Neki)",
    "ui": "Dashboard > branch > Connect"
   },
   "check": "pscale password list --format json (or pscale role list) shows the created credential, and connecting with it succeeds",
   "source": "https://planetscale.com/docs/vitess/connecting/connection-strings; https://planetscale.com/docs/postgres/connecting/roles; https://planetscale.com/docs/cli#available-commands"
  },
  {
   "id": "cap-18",
   "group": "Connectivity",
   "capability": "Restrict database access by IP address",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale database ip-restriction",
    "mcp": null,
    "ui": "Dashboard > database > Settings > IP restrictions"
   },
   "check": "pscale database ip-restriction show --format json lists the configured CIDR allowlist and connections outside it are rejected",
   "source": "https://planetscale.com/docs/postgres/connecting/ip-restrictions"
  },
  {
   "id": "cap-19",
   "group": "Connectivity",
   "capability": "Set up a private network connection (AWS PrivateLink / GCP Private Service Connect)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": null,
    "mcp": null,
    "ui": "Dashboard > database > Settings > Private connections"
   },
   "check": "The database's private endpoint shows status available and is reachable from the configured VPC",
   "source": "https://planetscale.com/docs/postgres/connecting/private-connections/aws-privatelink; https://planetscale.com/docs/postgres/connecting/private-connections/gcp-private-service-connect"
  },
  {
   "id": "cap-20",
   "group": "Connectivity",
   "capability": "Provision a dedicated PgBouncer connection pooler",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale pgbouncer create",
    "mcp": null,
    "ui": "Dashboard > branch > Connection pooling"
   },
   "check": "pscale pgbouncer show --format json reports the pooler as ready on port 6432",
   "source": "https://planetscale.com/docs/postgres/connecting/pgbouncer"
  },
  {
   "id": "cap-21",
   "group": "Governance",
   "capability": "Set query traffic budgets to throttle runaway Postgres queries (Database Traffic Control)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale traffic-control budget / rule",
    "mcp": null,
    "ui": "Dashboard > branch > Traffic control"
   },
   "check": "pscale traffic-control budget show --format json reflects the configured budget and queries exceeding it are blocked",
   "source": "https://planetscale.com/docs/postgres/traffic-control; https://planetscale.com/blog/introducing-database-traffic-control"
  },
  {
   "id": "cap-22",
   "group": "Integrations",
   "capability": "Create webhooks for database events",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /organizations/{org}/databases/{database}/webhooks",
    "mcp": null,
    "cli": "pscale webhook create",
    "ui": "Dashboard > database > Settings > Webhooks"
   },
   "check": "pscale webhook test <id> delivers a test payload to the configured URL and pscale webhook show lists recent deliveries",
   "source": "https://planetscale.com/docs/api/webhooks; https://planetscale.com/docs/cli#available-commands"
  },
  {
   "id": "cap-23",
   "group": "Integrations",
   "capability": "Import an existing database (Cloudflare D1, Supabase, Neon, Heroku, Aurora)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale import d1 start / status / complete",
    "mcp": null,
    "ui": "Dashboard > New database > Import"
   },
   "check": "pscale import d1 status --format json reports state completed and the target branch contains the imported tables",
   "source": "https://planetscale.com/docs/postgres/imports/postgres-imports"
  },
  {
   "id": "cap-24",
   "group": "Integrations",
   "capability": "Stream change data capture (logical CDC) out of a database",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": null,
    "mcp": null,
    "ui": "Dashboard > database > Settings > Integrations"
   },
   "check": "A connected CDC consumer (e.g. Debezium/Fivetran) receives row-change events after a write",
   "source": "https://planetscale.com/docs/postgres/integrations/logical-cdc; https://planetscale.com/docs/vitess/etl"
  },
  {
   "id": "cap-25",
   "group": "Postgres extensions",
   "capability": "Enable curated Postgres extensions (pg_cron, pg_partman, pg_stat_statements, pg_strict, TimescaleDB, etc.)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale branch extensions list",
    "mcp": null,
    "ui": "Dashboard > branch > Extensions"
   },
   "check": "Running CREATE EXTENSION for a listed extension succeeds and the extension appears in pg_extension",
   "source": "https://planetscale.com/docs/postgres/extensions"
  },
  {
   "id": "cap-26",
   "group": "Neki operations",
   "capability": "Manage Neki data topology, shards, routers, and sidecars",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale branch data-topology / pscale branch router / pscale branch sidecar",
    "mcp": null,
    "ui": "Dashboard > branch > Neki configuration"
   },
   "check": "pscale branch data-topology show --format json reflects the configured table-to-shard mapping",
   "source": "https://planetscale.com/docs/neki/data-topology; https://planetscale.com/docs/cli#available-commands"
  },
  {
   "id": "cap-27",
   "group": "Agent access",
   "capability": "Let an AI agent access and query a database through the MCP server with OAuth-scoped, read-only or full access",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "cli": null,
    "mcp": "https://mcp.pscale.dev/mcp/planetscale",
    "ui": "Dashboard > Connectors / Claude, Cursor, VS Code, etc."
   },
   "check": "The connected MCP client lists the planetscale_execute_read_query tool and a test query via the client returns rows",
   "source": "https://planetscale.com/docs/mcp-server"
  },
  {
   "id": "cap-28",
   "group": "Access control",
   "capability": "Manage organization members, teams, and roles",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /organizations/{org}/members",
    "mcp": null,
    "cli": "pscale org member / pscale org team",
    "ui": "Dashboard > Organization > Settings > Members"
   },
   "check": "pscale org member list --format json shows the invited member after they accept",
   "source": "https://planetscale.com/docs/security/access-control; https://planetscale.com/docs/cli#available-commands"
  },
  {
   "id": "cap-29",
   "group": "Access control",
   "capability": "Configure Single Sign-On (SSO) for an organization",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale org sso",
    "mcp": null,
    "ui": "Dashboard > Organization > Settings > SSO"
   },
   "check": "pscale org sso show --format json reports the configured identity provider as enabled",
   "source": "https://planetscale.com/docs/security/sso; https://planetscale.com/docs/planetscale-plans"
  },
  {
   "id": "cap-30",
   "group": "Access control",
   "capability": "Create and manage service tokens for API/CLI automation",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /organizations/{org}/service-tokens",
    "mcp": null,
    "cli": "pscale service-token create / add-access",
    "ui": "Dashboard > Organization > Settings > Service tokens"
   },
   "check": "pscale service-token list --format json shows the new token, and an API call authenticated with it succeeds",
   "source": "https://planetscale.com/docs/api/reference/service-tokens; https://planetscale.com/docs/cli#available-commands"
  },
  {
   "id": "cap-31",
   "group": "Compliance",
   "capability": "Review the organization audit log",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "cli": "pscale audit-log list",
    "mcp": null,
    "ui": "Dashboard > Organization > Audit log"
   },
   "check": "pscale audit-log list --format json includes an entry for a recent action such as a branch creation",
   "source": "https://planetscale.com/docs/security/audit-log#review-your-organization-audit-log"
  },
  {
   "id": "cap-32",
   "group": "Billing",
   "capability": "View and update the organization payment method and billing/spend settings",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "cli": "pscale billing payment-method",
    "mcp": "payment method read/full access scope",
    "ui": "Dashboard > Organization > Settings > Billing"
   },
   "check": "pscale billing payment-method show --format json reflects the updated card details",
   "source": "https://planetscale.com/docs/billing#spend-management; https://planetscale.com/docs/mcp-server"
  },
  {
   "id": "cap-33",
   "group": "Network diagnostics",
   "capability": "Check network latency from the current machine to PlanetScale regions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "cli": "pscale ping",
    "mcp": null,
    "ui": null
   },
   "check": "pscale ping --format json prints measured round-trip latency per region",
   "source": "https://planetscale.com/docs/vitess/connecting/network-latency; https://planetscale.com/docs/cli#available-commands"
  }
 ],
 "attempts": [
  {
   "t": "02:32",
   "cap": "docs",
   "capability": "Find docs",
   "task": "Read llms.txt, agent setup prompt, plans, billing, Stripe Projects docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://planetscale.com/docs/llms.txt 200 text/plain (23.5 KB); /docs/agent-setup/prompt.md is an agent-targeted setup page; every page has a .md twin",
   "notes": "/llms.txt at root 307s to docs",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "02:32",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Create account with test email via the public sign-up form, headless",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST https://auth.planetscale.com/sign-up (Rails form: email, password, confirmation, tos; hidden honeypot left empty) -> 302 to app.planetscale.com/new; verification mail arrived",
   "notes": "No CAPTCHA, no phone. Plain HTML form posted with curl (signed Web Bot Auth UA). Web form, not an API.",
   "quality": {
    "error_legibility": "n/a"
   }
  },
  {
   "t": "02:32",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Open confirmation link from mail",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Mail Verify your PlanetScale account arrived within seconds; GET app.planetscale.com/confirmation?confirmation_token=•••• -> 302; account then authorized a device login and created org an inbox",
   "notes": ""
  },
  {
   "t": "02:32",
   "cap": "credentials",
   "capability": "Get CLI credentials",
   "task": "pscale auth login --format json (OAuth device flow), approve the device code headless with the session cookie",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "login.out status pending with user_code; POST auth.planetscale.com/oauth/device (form) -> code_confirmed=true -> Authorization granted; pscale auth check --format json -> authenticated true, organization an inbox",
   "notes": "Device approval is a web page; done with curl + session cookie. CLI outputs structured JSON with next_steps.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear"
   }
  },
  {
   "t": "02:32",
   "cap": "first_call",
   "capability": "First API call",
   "task": "pscale org list --format json",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "[{name: an inbox, current: true}]",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "02:32",
   "cap": "cap-33",
   "capability": "Check network latency to regions",
   "task": "pscale ping --format json",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "JSON list of regions with latency, e.g. AWS eu-central-1 4.9ms, us-east-1 100.5ms",
   "notes": "Works without auth",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "04:45",
   "cap": "first_action",
   "capability": "Create a database",
   "task": "pscale database create agentdrives-test --engine postgresql --org an inbox --format json",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "CLI JSON: status error, issues[0].code unprocessable: We were unable to verify your credit card. Please add your payment information.",
   "notes": "No free plan (docs: PlanetScale does not offer a free plan). Every database needs a card on file.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "04:45",
   "cap": "cap-01",
   "capability": "Create a database",
   "task": "Create a single-node Postgres (PS-5, $5/mo) via REST API with a service token",
   "route": "api",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "POST https://api.planetscale.com/v1/organizations/an inbox/databases {name, kind: postgresql, cluster_size PS_5, replicas 0} -> 422 {code: unprocessable, message: We were unable to verify your credit card. Please add your payment information.}; docs planetscale-plans: no free plan",
   "notes": "Same wall on CLI and API. MCP server has no create-database tool.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "04:45",
   "cap": "pay",
   "capability": "Pay / add payment method",
   "task": "pscale billing payment-method update --format json (no card entered)",
   "route": "cli",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Returned {status: pending, id, checkout_url: https://checkout.stripe.com/c/pay/cs_live_••••, next_steps: payment-method status <id>}. Same via MCP tool planetscale_update_payment_method. We stopped there: no card.",
   "notes": "Card is attached in Stripe Checkout (setup mode); after that, database create/resize is headless via CLI/API. No x402/MPP/402 on api.planetscale.com (401 JSON), x402./mpp./agents. subdomains do not resolve, no /.well-known/ucp. Listed in Stripe Projects (projects.dev, planetscale/postgresql) - developer preview, needs Stripe account + access request; not tried. Also Cloudflare dashboard billing route.",
   "quality": {
    "error_legibility": "clear"
   }
  },
  {
   "t": "04:45",
   "cap": "cap-30",
   "capability": "Create and manage service tokens",
   "task": "Create service token, grant org access, list it, call the API with it",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pscale service-token create -> id [redacted]; add-access read_organization read_databases create_databases -> accesses listed; service-token list shows it; GET api.planetscale.com/v1/organizations with Authorization: <id>:<token> -> 200 list with an inbox",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "04:45",
   "cap": "cap-27",
   "capability": "Agent access via MCP server",
   "task": "Connect to hosted MCP with service token Bearer, tools/list, call a tool; then run a read query",
   "route": "mcp",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "initialize OK (server Gram); tools/list 25 tools incl. planetscale_execute_read_query/_write_query, update_payment_method; tools/call planetscale_list_organizations returned an inbox",
   "notes": "Query step impossible: no database without a card. No create_database tool in MCP.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "04:45",
   "cap": "cap-31",
   "capability": "Review the organization audit log",
   "task": "pscale audit-log list --format json after creating a service token",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Entry audit_action service_token.granted_access for auditable_id [redacted]",
   "notes": "Works on an org without a payment method",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "04:45",
   "cap": "cap-28",
   "capability": "Manage organization members",
   "task": "pscale org member list --format json",
   "route": "cli",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Lists our admin user",
   "notes": "Did not invite anyone: inviting would mail a person; accept flow needs a second account.",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "05:02",
   "cap": "cap-02",
   "capability": "Create a branch for isolated schema/data development",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). pscale branch create agentdrives-test dev -> 'source database agentdrives-test does not exist in organization an inbox'.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:02",
   "cap": "cap-03",
   "capability": "Deploy an online, zero-downtime schema change via a reviewable deploy request",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-04",
   "capability": "Revert a deployed schema change with no downtime or data loss",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-05",
   "capability": "Run SQL against a branch (interactive shell or non-interactive query)",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). pscale sql agentdrives-test main --query 'SELECT 1' -> 'database lookup: Not Found'.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-06",
   "capability": "Scale read traffic with replicas",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-07",
   "capability": "Resize a branch's cluster (compute/memory)",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-08",
   "capability": "Horizontally shard a database (explicit sharding workflow)",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-09",
   "capability": "Promote a development branch to production / switch over traffic",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-10",
   "capability": "Create and restore branch backups",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-11",
   "capability": "Restore a Postgres branch to a specific point in time",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-12",
   "capability": "View query insights (slow/expensive queries from production traffic)",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-13",
   "capability": "View anomaly detection and automated schema recommendations",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-14",
   "capability": "Query historical and live branch metrics (CPU, connections, QPS, etc.)",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-15",
   "capability": "Query recent Postgres/Neki branch logs",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-16",
   "capability": "Run live read-only diagnostic checks (bloat, locks, unused indexes, long-running queries)",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-17",
   "capability": "Manage database credentials (passwords/roles) for connecting",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-18",
   "capability": "Restrict database access by IP address",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-19",
   "capability": "Set up a private network connection (AWS PrivateLink / GCP Private Service Connect)",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-20",
   "capability": "Provision a dedicated PgBouncer connection pooler",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-21",
   "capability": "Set query traffic budgets to throttle runaway Postgres queries (Database Traffic Control)",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-22",
   "capability": "Create webhooks for database events",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-23",
   "capability": "Import an existing database (Cloudflare D1, Supabase, Neon, Heroku, Aurora)",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-24",
   "capability": "Stream change data capture (logical CDC) out of a database",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-25",
   "capability": "Enable curated Postgres extensions (pg_cron, pg_partman, pg_stat_statements, pg_strict, TimescaleDB, etc.)",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-26",
   "capability": "Manage Neki data topology, shards, routers, and sidecars",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-29",
   "capability": "Configure Single Sign-On (SSO) for an organization",
   "task": "Prerequisite: an existing database on a paid plan",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Needs a database; database create returns 422 'We were unable to verify your credit card. Please add your payment information.' (no free plan). Not attempted beyond the database prerequisite.",
   "notes": "Plan: Base (paid, card on file); cheapest is single-node Postgres from $5/mo",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:03",
   "cap": "cap-32",
   "capability": "View and update payment method",
   "task": "pscale billing payment-method show, then update (stop at Stripe Checkout)",
   "route": "cli",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "show -> NOT_FOUND payment method does not exist in organization an inbox with next_step update; update -> Stripe Checkout URL + setup id; status command documented",
   "notes": "Did not enter a card (no card, rules). View works; update stops at hosted checkout.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear"
   }
  },
  {
   "t": "08:03",
   "cap": "cap-28",
   "capability": "Manage organization members, teams, and roles",
   "task": "Create team agentdrives-team, add ourselves, list members, delete team",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "org team create --name agentdrives-team -> id 6agnb7c9bmpt slug agentdrives-team-2; team member add -> membership 15toeumujk9s; team member list shows it; team delete -> team deleted; team list -> []",
   "notes": "First try with a positional name failed with clear UNKNOWN_COMMAND JSON; --name is required. Slug got a -2 suffix though no other team existed. Did not invite outside members (would mail a person).",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:03",
   "cap": "cap-30",
   "capability": "Create and manage service tokens",
   "task": "Delete the service token and confirm",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pscale service-token delete [redacted] -> token deleted; service-token list -> []",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "09:48",
   "cap": "cancel",
   "capability": "Cancel plan",
   "task": "Nothing to cancel: no plan or database was started",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Billing is per database; docs: deleting a database ends its billing; pscale database delete and billing payment-method delete exist in CLI/API",
   "notes": "Not exercised"
  },
  {
   "t": "09:48",
   "cap": "delete",
   "capability": "Delete account",
   "task": "Delete account and its only-member org",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "No delete-user/org endpoint in OpenAPI (280 operations: only GET/PATCH /organizations/{org}, GET /user) or CLI. Web UI Settings > Account > Delete account: dialog asks to type email, then a confirm-access password page (sudo mode), then deleted -> redirected to sign-in. Afterwards pscale org list -> NO_AUTH token expired; password sign-in POST -> 302 back to sign-in.",
   "notes": "Browser only; no CAPTCHA",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "09:48",
   "cap": "new-03",
   "capability": "CLI agent guide and JSON auth check",
   "task": "pscale agent-guide --format json and auth check --format json",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "agent-guide status ok with guide text; auth check returned action_required with issues/next_steps before login, ok/authenticated after",
   "quality": {
    "error_legibility": "clear",
    "docs_match": "match"
   }
  }
 ],
 "stale": false,
 "icon": "/logos/planetscale.png",
 "monitored": false,
 "verdict": "Gets in on its own: L2 · Gets in. Our agent signed up headless, no CAPTCHA, confirmed by email, logged in through the CLI's device flow, and pulled a service token for both the API and a hosted MCP server. It stopped trying to create a database: the API answered that it could not verify a card, and there is no free plan to work around that. Paying needs a card through Stripe Checkout; our agent never attached one, so it never reached core database work. Deleting the account needs the web UI: no API route exists for it.",
 "page": "https://agentdrives.com/tools/planetscale?via=api"
}