{
 "$schema": "https://agentdrives.com/schemas/tool.schema.json",
 "id": "prd_01m57vgtng79p4eg45njpqzpq7",
 "ids": {
  "org": "org_01m57vgtngh3gvqrd5s6a42qd8",
  "surfaces": {
   "web": "srf_01m5w7r4jfsga65v4p2qx0f4dz",
   "api": "srf_01m5w7r4jfnv461x5qefrpe2cj",
   "mcp": "srf_01m5w7r4jfrcnepdmtx7fybwst",
   "cli": "srf_01m5w7r4jf2s5bae4gt1zggsyp",
   "sdk": "srf_01m5w7r4jfws3z4jghydjrrncs"
  },
  "slugs": [
   "upstash"
  ],
  "domain": "upstash.com",
  "mcp_registry": [
   "io.github.upstash/upstash-mcp-server"
  ]
 },
 "slug": "upstash",
 "name": "Upstash",
 "url": "https://upstash.com",
 "domain": "upstash.com",
 "category": "databases",
 "category_name": "Databases",
 "tested_at": "2026-10-31",
 "run": "20261031T051021Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261026T123949Z",
   "date": "2026-10-26",
   "level": 4,
   "engine": {
    "model": "claude-opus-5-5",
    "driver": 5,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip",
    "version": "2026.10.26",
    "commit": "5fcdb911f0dcc3c91a9794ca76f8d4896244f439",
    "prompts": {
     "version": "2026.10.26",
     "commit": "9bef5e75f8e732d063fdfff8e766feca445cb123"
    },
    "rules": {
     "version": "2026.10.26",
     "commit": "5fcdb911f0dcc3c91a9794ca76f8d4896244f439"
    }
   },
   "stop": null,
   "paid": false,
   "agent_paid": null
  },
  {
   "run": "20261031T051021Z",
   "date": "2026-10-31",
   "level": 4,
   "engine": {
    "model": "anthropic/opus",
    "driver": 5,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip",
    "version": "2026.10.31",
    "commit": "9bdaa4685cb1cdec0dd07701e33ba80406e134d5",
    "prompts": {
     "version": "2026.10.30",
     "commit": "fc07298dc100d95517331721523f234c322dbe32"
    },
    "rules": {
     "version": "2026.10.28",
     "commit": "3440e5c62c95160a8125825a987e36d623edd38d"
    }
   },
   "stop": null,
   "paid": false,
   "agent_paid": null
  }
 ],
 "level": 4,
 "level_name": "Runs on its own",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 2,
  "tries": 2,
  "self_start": true
 },
 "badges": [
  "agent-can-leave"
 ],
 "not_counted": null,
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: no key needed, MCP sign-in, sign-up in a browser",
   "how": "no-account",
   "way": "keyless"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "yes",
   "text": "Work done: 100% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Reaches the checkout: stopped at the $0.20 per 100K commands charge",
   "value": "checkout",
   "route": "billing_api"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted",
   "delete": {
    "state": "yes",
    "text": "Deletes its account",
    "why": null
   }
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Learn",
   "state": "yes",
   "text": "Docs it can act on: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ],
   "docs": "complete"
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: no key needed, MCP sign-in, sign-up in a browser",
   "how": "no-account",
   "way": "keyless",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "yes",
   "text": "Work done: 100% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Reaches the checkout: stopped at the $0.20 per 100K commands charge",
   "value": "checkout",
   "route": "billing_api",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted",
   "delete": {
    "state": "yes",
    "text": "Deletes its account",
    "why": null
   },
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "keyless",
   "label": "No key needed",
   "routes": [
    "keyless"
   ],
   "minutes": 2,
   "core": "1/6"
  },
  {
   "key": "mcp_signin",
   "label": "MCP sign-in",
   "routes": [
    "oauth_consent"
   ],
   "minutes": 2,
   "core": "6/6"
  },
  {
   "key": "browser_signup",
   "label": "Sign-up in a browser",
   "routes": [
    "email_password"
   ],
   "minutes": 7,
   "core": "6/6"
  }
 ],
 "minutes": 2,
 "next": {
  "to": 5,
  "text": "Next: pay without a person"
 },
 "stop": null,
 "core": "6/6",
 "scores": {
  "coverage": 100,
  "reliability": 75,
  "resilience": 86,
  "setup": 100,
  "surface_coverage": 88,
  "docs_accuracy": 100,
  "docs_completeness": 63
 },
 "parts": {
  "holds_up": 80,
  "docs_match": 89,
  "setup": 100,
  "security": "private",
  "standards": [
   {
    "standard": "MCP discovery",
    "state": "current",
    "behind": null,
    "value": "ok"
   },
   {
    "standard": "MCP client registration",
    "state": "behind",
    "behind": null,
    "value": "dcr"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 2,
    "value": "3.0.4"
   }
  ]
 },
 "reliability_method": "pass^k",
 "resilience": {
  "parts": {
   "error_legibility": 92,
   "recovery": 100,
   "idempotency": 67
  },
  "summary": {
   "error_legibility": "clear",
   "recovery": "good",
   "idempotency": "safe",
   "rate_limits": "none-seen",
   "notes": "Errors named the fix (vector dimension, wrong token with a docs link, plan limits, a topology 429 with its window); QStash Upstash-Deduplication-Id and start-redis Idempotency-Key deduplicate. The one silent case: bulk DLQ restart/resume ignored a malformed body and acted on every entry."
  }
 },
 "stress": [
  {
   "capability": "Store a key-value pair in Redis",
   "probe": "MCP redis_run_command on a well-formed database id that does not exist",
   "outcome": "Upstash API request failed (404 GET /v2/redis/database/00000000-0000-4000-8000-000000000000): \"database not found\"",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Store a key-value pair in Redis",
   "probe": "REST unknown command",
   "outcome": "HTTP/2 400 \naccess-control-allow-credentials: true\ncontent-type: application/json; charset=utf-8\ndate: Sat, 31 Oct 2026 05:59:11 GMT\nserver: Upstash Redis Database (1.19.4)\ncontent-length: 123\n\n{\"erro",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Store a key-value pair in Redis",
   "probe": "bad credential on Redis REST",
   "outcome": "HTTP/2 401 \nacc HTTP/2 401 \naccess-control-allow-credentials: true\ncontent-type: application/json; charset=utf-8\ncontent-length: 134\ndate: Sat, 31 Oct 2026 05:59:12 GMT\n\n{\"error\":\"WRONGPASS invalid or",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "credentials",
   "probe": "bad Developer API key",
   "outcome": "HTTP/1.1 401 Un HTTP/1.1 401 Unauthorized\naccess-control-allow-credentials: true\naccess-control-allow-headers: origin, Origin, Content-Type, Content-Length, Accept-Encoding, authorization, X-CSRF-Toke",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Store a key-value pair in Redis",
   "probe": "burst of 15 PINGs on Redis REST",
   "outcome": "codes ['0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n', '0 \\n'] ",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": "none-seen"
  },
  {
   "capability": "Run a vector search",
   "probe": "query with wrong vector dimension (2 vs 384)",
   "outcome": "Request failed (422 POST https://helping-lionfish-4540-us1-vector.upstash.io/query): {\"error\":\"Invalid vector dimension: 2, expected: 384\",\"status\":422}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Publish a reliable HTTP message/background job via QStash",
   "probe": "publish to an invalid destination",
   "outcome": "HTTP/1.1 404 No HTTP/1.1 404 Not Found\ndate: Sat, 31 Oct 2026 05:59:27 GMT\ncontent-type: application/json\ncontent-length: 37\naccess-control-allow-credentials: true\nburst-bandwidthlimit-limit: 52428800",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Publish a reliable HTTP message/background job via QStash",
   "probe": "same publish twice with Upstash-Deduplication-Id",
   "outcome": "HTTP/1.1 201 Created\ndate: Sat, 31 Oct 2026 05:59:28 GMT\ncontent-type: application/json\ncontent-length: 73\naccess-contro | HTTP/1.1 201 Created\ndate: Sat, 31 Oct 2026 05:59:29 GMT\ncontent-type: applic",
   "grade": "clear",
   "idempotent": "no",
   "rate_limit": null
  },
  {
   "capability": "Build a durable multi-step workflow",
   "probe": "trigger with the workflow URL missing",
   "outcome": "HTTP/1.1 400 Ba HTTP/1.1 400 Bad Request\ndate: Sat, 31 Oct 2026 05:59:30 GMT\ncontent-type: application/json\ncontent-length: 52\naccess-control-allow-credentials: true\nburst-bandwidthlimit-limit: 524288",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a cloud sandbox (Box)",
   "probe": "box_exec on a box id that does not exist",
   "outcome": "Box API request failed (404 POST /v2/box/no-such-box-00000/exec): {\"error\":\"Box not found\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Upload a file to Blob storage",
   "probe": "upload path with a '..' segment",
   "outcome": "Input validation error: Invalid arguments for tool blob_upload_url: files.0.path: path must be a relative object key: no leading slash, no empty, '.' or '..' segments",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a cloud sandbox (Box)",
   "probe": "box_manage create with an invalid size enum",
   "outcome": "Input validation error: Invalid arguments for tool box_manage: size: Invalid option: expected one of \"small\"|\"medium\"|\"large\"",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Store a key-value pair in Redis",
   "probe": "REST unknown command",
   "outcome": "400 {\"error\":\"ERR Command is not available: 'SETT'. See https://upstash.com/docs/redis/overall/rediscompatibility for details\"}",
   "grade": "vague",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Store a key-value pair in Redis",
   "probe": "bad credential on Redis REST",
   "outcome": "401 {\"error\":\"WRONGPASS invalid or missing auth token. See https://docs.upstash.com/redis/troubleshooting/http_unauthorized for details.\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Store a key-value pair in Redis",
   "probe": "burst of 15 PINGs on Redis REST",
   "outcome": "codes ['200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200']; rate headers []",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": "none-seen"
  },
  {
   "capability": "Publish a reliable HTTP message/background job via QStash",
   "probe": "same publish twice with Upstash-Deduplication-Id",
   "outcome": "201 {\"messageId\":\"msg_7YoJxFpwkEy3LJPumDQhn63B9WrfECm2fWtsW6ho5vxXr5EFhyG4x\"} | 201 {\"messageId\":\"msg_7YoJxFpwkEy3LJPumDQhn63B9WrfECm2fWtsW6ho5vxXr5EFhyG4x\",\"deduplicated\":true}",
   "grade": "clear",
   "idempotent": "yes",
   "rate_limit": null
  },
  {
   "capability": "Publish a reliable HTTP message/background job via QStash",
   "probe": "publish to an invalid destination",
   "outcome": "404 {\"error\":\"topic not-a-url not found\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Build a durable multi-step workflow",
   "probe": "trigger with the workflow URL missing",
   "outcome": "400 {\"error\":\"a non-empty destination must be provided\"}",
   "grade": "vague",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "credentials",
   "probe": "bad Developer API key",
   "outcome": "401 {\"error\":\"Unauthorized\"} ct=['content-type: application/json; charset=utf-8']",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "credentials",
   "probe": "revoked Box API key",
   "outcome": "401 {\"error\":\"Invalid box API key\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Build a durable multi-step workflow",
   "probe": "bulk DLQ restart with the ids in a JSON body instead of the dlqIds query parameter",
   "outcome": "200 {\"workflowRuns\":[3 runs restarted]} (resume: 2 runs) - the unknown body was ignored and the call acted on every DLQ entry",
   "grade": "silent",
   "idempotent": null,
   "rate_limit": null
  }
 ],
 "surface_audit": {
  "totals": {
   "items": 321,
   "documented": 320,
   "safe": 286,
   "exercised": 278,
   "passed": 253,
   "skipped": 34,
   "blocked": 8,
   "not_run": 0,
   "match": 278,
   "drift": 0,
   "broken_doc": 0,
   "docs_complete": 81,
   "docs_partial": 239,
   "docs_missing": 0,
   "errors_clear": 46,
   "errors_vague": 0,
   "errors_silent": 0
  }
 },
 "coverage_core": 100,
 "coverage_own": 100,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 5,
  "model": "anthropic/opus",
  "profile": "full",
  "assisted": false,
  "handoff": false
 },
 "methodology": 42,
 "rules_date": "2026-10-30",
 "engine": {
  "model": "anthropic/opus",
  "driver": 5,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "skip",
  "version": "2026.10.31",
  "commit": "9bdaa4685cb1cdec0dd07701e33ba80406e134d5",
  "prompts": {
   "version": "2026.10.30",
   "commit": "fc07298dc100d95517331721523f234c322dbe32"
  },
  "rules": {
   "version": "2026.10.28",
   "commit": "3440e5c62c95160a8125825a987e36d623edd38d"
  }
 },
 "same_level_drives": 2,
 "drives": 2,
 "same_stop_drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "newer_drives": null,
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-31"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "verified",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt (H1 Upstash, 'How agents should call Upstash'), Markdown by Accept: text/markdown with Vary: Accept and .md URLs, three OpenAPI specs (Developer API 3.0.4, QStash 3.1.0, Workflow 3.1.0) listed in /.well-known/api-catalog, and the MCP and CLI pages."
  },
  "signup": {
   "status": "n/a",
   "note": "Not needed: a documented route works without an account.",
   "way": "keyless",
   "no_account": true,
   "note_driver": "The keyless route needs no account: POST https://upstash.com/start-redis returns a working temporary Redis. For the full product, the sign-up is a browser form at console.upstash.com/auth/sign-up (email + password, Clerk), no CAPTCHA; done in the browser (routes.json email_password).",
   "status_driver": "n/a"
  },
  "verify": {
   "status": "n/a",
   "note": "Not needed: a documented route works without an account.",
   "no_account": true,
   "note_driver": "No verification on the keyless route. On the account route: a 6-digit code mailed by notifications@upstash.com arrived in under a minute and was entered in the browser.",
   "status_driver": "n/a"
  },
  "credentials": {
   "status": "headless",
   "note": "start-redis returns the REST endpoint and token in its markdown answer. On the account: Developer API keys are made in the console only (browser); Box API keys can be created, used and revoked without a browser over MCP box_apikey (revoked key -> 401 Invalid box API key); the MCP server was signed in with OAuth (DCR, PKCE, one consent click in the agent's browser).",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "REST SET/GET on the keyless database (200); on the account, GET /v2/redis/databases with email:API_KEY (200) and MCP calls with the OAuth token.",
   "route": "no_account"
  },
  "first_action": {
   "status": "headless",
   "note": "SET/APPEND/DEL on the keyless Redis; on the account, MCP redis_create_database then commands, and every core capability created over MCP/API."
  },
  "pay": {
   "status": "blocked",
   "grade": "P3",
   "rails": [
    "Stripe Elements card form in the console (Billing > Add new card); plan changes over MCP/Developer API once a card is on file"
   ],
   "rail_ids": [
    "stripe-elements",
    "billing-api"
   ],
   "first_party": true,
   "rail_scope": "full",
   "trial_path": "free tier",
   "3ds": "none",
   "route": "billing_api",
   "checkout": {
    "reached": "card_form",
    "processor": "stripe_elements",
    "captcha": "invisible",
    "three_ds": "not_seen",
    "card_form": true,
    "phone_field": "optional",
    "wallets": [
     "link",
     "google_pay"
    ],
    "rail_offer": "none",
    "price": "0.20",
    "currency": "USD",
    "period": "usage",
    "plan": "Pay as You Go (per 100K commands); Fixed 1GB $30/month",
    "last_button": "Next"
   },
   "person": "none",
   "ours": "no_card",
   "note": "No 402, x402 or MPP anywhere (x402./mpp. hosts do not resolve); a Stripe Projects listing only. Paid plans need a card added in the console's Stripe Elements dialog (Link with optional phone, Google Pay frame, invisible hCaptcha frame); the walk stopped at that card form because this drive has no card. Once a card is on file, plans change over MCP (redis_change_plan, qstash_set_plan, index_set_plan) and the Developer API; none were called. No payment went through.",
   "detected_grade": "P3",
   "exercised": false
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent used the free plan.",
   "docs_note": "Nothing to cancel: the drive stayed on the free plan with no card. Plans are per database and are changed back over MCP/Developer API/CLI or the console; deleting the resource stops usage charges.",
   "docs_grade": "",
   "nothing": "free_plan"
  },
  "delete": {
   "status": "browser",
   "note": "Account > Settings > Delete Personal Account > Review ('Your Clerk login and all account data will be anonymized') > type 'delete my account' > Delete Account; no API, CLI or MCP route. Afterwards the Developer API key got 401, the MCP token 403 'No Upstash account exists for this user yet', and the password login failed. The keyless database (no account) expires after 3 days (3 Nov 2026).",
   "left": "deleted",
   "after_hours": null,
   "account": true
  }
 },
 "routes": [
  {
   "route": "keyless",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "in",
   "wall": null,
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 2,
   "browser": false
  },
  {
   "route": "email_password",
   "offered": "seen",
   "tried": true,
   "not_tried": null,
   "result": "in",
   "wall": null,
   "person": "none",
   "brings": "inbox",
   "fresh": true,
   "minutes": 7,
   "browser": true
  },
  {
   "route": "sso_github",
   "offered": "seen",
   "tried": false,
   "not_tried": "policy",
   "result": null,
   "wall": null,
   "person": "none",
   "brings": "github_account",
   "fresh": true,
   "minutes": 0,
   "browser": null
  },
  {
   "route": "sso_google",
   "offered": "seen",
   "tried": false,
   "not_tried": "policy",
   "result": null,
   "wall": null,
   "person": "none",
   "brings": "google_account",
   "fresh": true,
   "minutes": 0,
   "browser": null
  },
  {
   "route": "oauth_consent",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "in",
   "wall": null,
   "person": "none",
   "brings": "inbox",
   "fresh": true,
   "minutes": 2,
   "browser": true
  },
  {
   "route": "sso_enterprise",
   "offered": "documented",
   "tried": false,
   "not_tried": "assisted_only",
   "result": null,
   "wall": null,
   "person": "each",
   "brings": "person_grant",
   "fresh": true,
   "minutes": 0,
   "browser": null
  }
 ],
 "checkout": {
  "reached": "card_form",
  "processor": "stripe_elements",
  "captcha": "invisible",
  "three_ds": "not_seen",
  "phone_field": "optional",
  "wallets": [
   "link",
   "google_pay"
  ],
  "rail_offer": "none",
  "period": "usage",
  "card_form": true,
  "price": "0.20",
  "currency": "USD",
  "plan": "Pay as You Go (per 100K commands); Fixed 1GB $30/month",
  "last_button": "Next"
 },
 "docs": {
  "at": "2026-10-31",
  "read": 600,
  "listed": 1519,
  "sampled": true,
  "overall": "complete",
  "getting_started": "found",
  "auth": "found",
  "errors": "found",
  "examples": "good",
  "freshness": "fresh",
  "newest": "2026-10-28",
  "core_pages": "6 of 6",
  "capabilities": "covered",
  "label": "No gaps in what we read"
 },
 "claims": {
  "claimed": 13,
  "tried": 13,
  "held": 12,
  "broken": 0,
  "unclear": 1,
  "not_tried": 0,
  "undocumented_works": 0
 },
 "pay_options": {
  "checked": "2026-10-31",
  "source": "probe",
  "options": [
   {
    "id": "stripe-projects",
    "name": "Stripe Projects",
    "kind": "agent-rail",
    "first_party": true,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [
   "stripe-projects"
  ],
  "paid": null,
  "exercised": false,
  "detected_grade": "P3",
  "trial": {
   "no_card": null,
   "card_required": true,
   "free_plan": true
  },
  "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": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "urls": {
  "docs": "https://upstash.com/docs/introduction",
  "llms_txt": "https://upstash.com/llms.txt",
  "mcp": "https://mcp.upstash.com/mcp"
 },
 "surface_notes": {
  "api": "REST: Developer API 62 operations, QStash 43, Workflow 32, plus Redis/Vector/Search data-plane REST",
  "openapi": "Developer API spec 3.0.4 (behind 3.2.1), QStash and Workflow specs 3.1.0",
  "cli": "upstash 1.5.0 (npm 'upstash' / '@upstash/cli')",
  "sdk": "@upstash/box 0.7.10, @upstash/blob 0.0.12, @upstash/workflow 1.5.0 used",
  "webhooks": "QStash signs deliveries; signing keys at /v2/keys",
  "llms_txt": "llms.txt + docs llms.txt + Markdown pages"
 },
 "surface_sizes": [
  {
   "kind": "api",
   "listed": 151,
   "tested": 135
  },
  {
   "kind": "mcp",
   "listed": 75,
   "tested": 63
  },
  {
   "kind": "cli",
   "listed": 70,
   "tested": 56
  },
  {
   "kind": "sdk",
   "listed": 14,
   "tested": 14
  }
 ],
 "can_do": [
  "Get a temporary Redis database with no account and use it over REST",
  "Store, read, update and delete Redis keys over MCP, REST, redis-cli or the CLI",
  "Create a Vector index, upsert, query, filter by metadata and embed raw text with a built-in model",
  "Publish, delay, cancel and schedule QStash messages and work the dead-letter queue",
  "Run a durable multi-step Workflow, read its steps and cancel a run",
  "Create a Box sandbox, run shell commands, read and write files, expose a port, snapshot and restore, and run its built-in coding agent",
  "Create a Blob bucket, upload, list, download, sign URLs, set cache control and delete objects",
  "Run full-text search over Redis data and Upstash Search",
  "Create and revoke Box API keys without a browser",
  "Invite a team member and read the audit log"
 ],
 "cannot_do": [
  {
   "what": "Create an account without a browser",
   "why": "Sign-up is a browser form with an emailed code; no API sign-up or claim flow for an agent"
  },
  {
   "what": "Create a Developer API key without a browser",
   "why": "Developer API keys are made in the console only"
  },
  {
   "what": "Pay for a plan on its own",
   "why": "No agent payment rail; a card has to be added in the console's Stripe form first"
  },
  {
   "what": "Delete the account without a browser",
   "why": "Account deletion is in the console only"
  },
  {
   "what": "Back up a Redis database or set a budget on the free plan",
   "why": "Paid databases only"
  }
 ],
 "blockers": [
  "Browser-only sign-up with an emailed code",
  "Card required in a web form before any paid plan"
 ],
 "tips_for_agents": [
  "POST https://upstash.com/start-redis with an Idempotency-Key header for a scratch Redis without an account; POST again with the same key to re-fetch it.",
  "Workflow logs lag 10-60 s: poll logs_list before concluding a run is missing.",
  "A Box preview URL (box_preview create) gives you a public HTTPS endpoint to host a workflow or receive QStash deliveries.",
  "Bulk DLQ endpoints take dlqIds as query parameters; without them they act on every entry."
 ],
 "selfhost": null,
 "edge_case": "none",
 "summary": "An agent gets a working Redis from Upstash with no account (POST /start-redis), and after a browser sign-up with an emailed code it drove all six core products (Redis, Vector, QStash, Workflow, Box, Blob) through the official MCP server and APIs, 3 of 3 each. Paying needs a card in a Stripe form in the console and there is no agent payment rail; account deletion is browser-only and was verified.",
 "wall": "",
 "plan_scope": "free plan",
 "robots_stop": null,
 "robots": null,
 "terms": null,
 "terms_read": "2026-10-31",
 "email_gate": null,
 "plain": {
  "summary": "Upstash sells serverless data tools such as Redis, vector search, message queues, workflows, sandboxes and file storage. An agent got a working temporary Redis with no account, and after signing up in a browser it used all six main products on its own. It stopped at paying: a card has to be typed into a web form.",
  "can_do": [
   "Get a temporary Redis database with no account and use it over a web call",
   "Sign up in a browser with an email code and sign in to the official MCP server",
   "Store, read, update and delete Redis data",
   "Run vector searches, queue messages, run multi-step workflows and sandboxes, and upload files",
   "Create and revoke a Box key without a browser",
   "Delete the account in the console; the old keys and login were refused afterwards"
  ],
  "cannot_do": [
   {
    "what": "Create a full account without a browser",
    "why": "Sign-up is a web form with an emailed code; no API sign-up was found"
   },
   {
    "what": "Create a Developer API key without a browser",
    "why": "The key creation only in the console"
   },
   {
    "what": "Pay for a plan on its own",
    "why": "No agent payment option; a card goes into a web form first"
   },
   {
    "what": "Delete the account without a browser",
    "why": "The account deletion only in the console"
   },
   {
    "what": "Back up a database or set a spend budget",
    "why": "These need a paid plan"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Back up and restore a Redis database",
   "plan": "paid database (pay as you go or fixed)",
   "evidence": "POST /v2/redis/create-backup -> 400 \"only paid databases can use backup feature\""
  },
  {
   "capability": "Set a monthly spend budget on a database",
   "plan": "paid database",
   "evidence": "PATCH /v2/redis/update-budget -> 400 \"only paid databases can set a budget\""
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "capability": "Store a key-value pair in Redis",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST https://<db>.upstash.io (REST command, e.g. SET/GET)",
    "mcp": "redis set/get tool",
    "cli": "redis-cli over TCP",
    "ui": "Console > Redis > Data Browser"
   },
   "check": "GET https://<db>.upstash.io/get/<key> returns the stored value",
   "capability_id": "cap_rjjr7dhj",
   "source": "https://upstash.com/docs/redis/features/restapi",
   "result": "done",
   "via": "api",
   "done_on": [
    "api",
    "mcp",
    "cli"
   ]
  },
  {
   "id": "cap-02",
   "capability": "Run a vector search",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /query on a Vector index",
    "mcp": "vector query tool",
    "cli": null,
    "ui": "Console > Vector > Query"
   },
   "check": "Query response returns ranked matches with scores for an upserted vector",
   "capability_id": "cap_een15d28",
   "source": "https://upstash.com/docs/vector/overall/getstarted",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp",
    "api"
   ]
  },
  {
   "id": "cap-03",
   "capability": "Publish a reliable HTTP message/background job via QStash",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST https://qstash.upstash.io/v2/publish/{url}",
    "mcp": "qstash publish tool",
    "cli": null,
    "ui": "Console > QStash > Messages"
   },
   "check": "GET /v2/messages/{id} shows delivered status and the target endpoint received the request",
   "capability_id": "cap_fpy758cz",
   "source": "https://upstash.com/docs/qstash/overall/getstarted",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp",
    "api"
   ]
  },
  {
   "id": "cap-04",
   "capability": "Build a durable multi-step workflow",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "Workflow SDK (@upstash/workflow) over HTTP",
    "mcp": "workflow tools",
    "cli": null,
    "ui": "Console > Workflow > Runs"
   },
   "check": "Console run view shows each step completed in order with retries recorded",
   "capability_id": "cap_n1f0dmyw",
   "source": "https://upstash.com/docs/workflow/getstarted",
   "result": "done",
   "via": "api",
   "done_on": [
    "api",
    "mcp"
   ]
  },
  {
   "id": "cap-05",
   "capability": "Create a cloud sandbox (Box)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "Box SDK (@upstash/box) create",
    "mcp": "box create tool",
    "cli": null,
    "ui": "Console > Box"
   },
   "check": "Box status endpoint shows the new sandbox running with a filesystem and shell",
   "capability_id": "cap_c8crr8s0",
   "source": "https://upstash.com/docs/box/overall/quickstart",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp",
    "api"
   ]
  },
  {
   "id": "cap-06",
   "capability": "Upload a file to Blob storage",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "Bucket.put via @upstash/blob, S3-compatible API",
    "mcp": "blob upload tool",
    "cli": null,
    "ui": "Console > Blob"
   },
   "check": "Bucket.list or Bucket.get shows the uploaded object at its path",
   "capability_id": "cap_facpbh70",
   "source": "https://upstash.com/docs/blob/overall/quickstart",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp",
    "cli"
   ]
  },
  {
   "id": "cap-07",
   "capability": "Create a Redis database",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/redis/database (Developer API)",
    "mcp": "redis create-database tool",
    "cli": null,
    "ui": "Console > Create Database"
   },
   "check": "GET /v2/redis/database/{id} returns the new database's endpoint",
   "capability_id": "cap_9a3jhdb4",
   "source": "https://upstash.com/docs/devops/developer-api/redis/create_database_global.md",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp"
   ]
  },
  {
   "id": "cap-08",
   "capability": "Back up and restore a Redis database",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v2/redis/backup, POST /v2/redis/backup/restore",
    "mcp": null,
    "cli": null,
    "ui": "Console > Redis > Backups"
   },
   "check": "List Backup endpoint shows the completed backup; after restore, keys match the backup's state",
   "capability_id": "cap_drp5sav8",
   "source": "https://upstash.com/docs/redis/features/backup.md",
   "result": "plan_gated",
   "via": "mcp",
   "counted": false
  },
  {
   "id": "cap-09",
   "capability": "Add read regions to a Redis Global Database",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v2/redis/update-regions",
    "mcp": null,
    "cli": null,
    "ui": "Console > Redis > Regions"
   },
   "check": "Get Database endpoint lists the added read region",
   "capability_id": "cap_j8kyym81",
   "source": "https://upstash.com/docs/redis/features/globaldatabase.md",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-10",
   "capability": "Run a full-text/hybrid search over Redis data",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Redis Search commands",
    "mcp": null,
    "cli": "redis-cli",
    "ui": null
   },
   "check": "A search query returns ranked documents from an indexed Redis Search collection",
   "capability_id": "cap_0gwx7zby",
   "source": "https://upstash.com/docs/redis/search/overall/getstarted",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp"
   ]
  },
  {
   "id": "cap-11",
   "capability": "Filter a vector query by metadata",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /query with filter expression",
    "mcp": null,
    "cli": null,
    "ui": "Console > Vector > Query"
   },
   "check": "Query results only include vectors whose metadata matches the filter",
   "capability_id": "cap_bsb5z2vr",
   "source": "https://upstash.com/docs/vector/features/filtering.md",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp"
   ]
  },
  {
   "id": "cap-12",
   "capability": "Create embeddings with a built-in model",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /upsert with raw text (built-in embedding model index)",
    "mcp": null,
    "cli": null,
    "ui": "Console > Vector > Create Index (model)"
   },
   "check": "Upserting raw text stores a vector without the caller computing an embedding first",
   "capability_id": "cap_0g9776e9",
   "source": "https://upstash.com/docs/vector/features/embeddingmodels.md",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp"
   ]
  },
  {
   "id": "cap-13",
   "capability": "Schedule a recurring QStash message (cron)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/schedules with Upstash-Cron header",
    "mcp": "qstash schedule tool",
    "cli": null,
    "ui": "Console > QStash > Schedules"
   },
   "check": "GET /v2/schedules/{id} shows the cron expression and next run; messages appear on schedule",
   "capability_id": "cap_3cw04j8g",
   "source": "https://upstash.com/docs/qstash/features/schedules.md",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp"
   ]
  },
  {
   "id": "cap-14",
   "capability": "Retry or inspect a failed message from the Dead Letter Queue",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /v2/dlq",
    "mcp": null,
    "cli": null,
    "ui": "Console > QStash > DLQ"
   },
   "check": "Retried DLQ entry is removed from the DLQ and a new delivery attempt is logged",
   "capability_id": "cap_rcpbrnxt",
   "source": "https://upstash.com/docs/qstash/features/dlq.md",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp",
    "api"
   ]
  },
  {
   "id": "cap-15",
   "capability": "Run shell commands inside a Box sandbox",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Box SDK shell.run",
    "mcp": "box shell tool",
    "cli": null,
    "ui": "Console > Box > Terminal"
   },
   "check": "Command output/exit code is returned and files it wrote appear in the box filesystem",
   "capability_id": "cap_f85p09qm",
   "source": "https://upstash.com/docs/box/overall/shell.md",
   "result": "done",
   "via": "sdk",
   "done_on": [
    "sdk"
   ]
  },
  {
   "id": "cap-16",
   "capability": "Read and write files in a Box sandbox",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Box SDK files.read/write",
    "mcp": "box files tool",
    "cli": null,
    "ui": "Console > Box > Files"
   },
   "check": "Reading a path just written returns the same content",
   "capability_id": "cap_8t04x8ss",
   "source": "https://upstash.com/docs/box/overall/files.md",
   "result": "done",
   "via": "sdk",
   "done_on": [
    "sdk"
   ]
  },
  {
   "id": "cap-17",
   "capability": "Expose a Box sandbox process on a public URL",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Box SDK preview/expose port",
    "mcp": null,
    "cli": null,
    "ui": "Console > Box > Preview"
   },
   "check": "The returned public URL serves the process listening on the exposed port",
   "capability_id": "cap_5fa9ht0p",
   "source": "https://upstash.com/docs/box/overall/preview.md",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp"
   ]
  },
  {
   "id": "cap-18",
   "capability": "Snapshot and restore a Box sandbox",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Box SDK snapshot/restore",
    "mcp": null,
    "cli": null,
    "ui": "Console > Box > Snapshots"
   },
   "check": "A box restored from a snapshot has the same files as when the snapshot was taken",
   "capability_id": "cap_aftm6cmq",
   "source": "https://upstash.com/docs/box/overall/snapshots.md",
   "result": "done",
   "via": "sdk",
   "done_on": [
    "sdk"
   ]
  },
  {
   "id": "cap-19",
   "capability": "Delegate a task to the box's built-in coding agent",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Box SDK agent.run (Claude Code/Codex/OpenCode)",
    "mcp": "box agent tool",
    "cli": null,
    "ui": "Console > Box > Agent"
   },
   "check": "Agent run result shows completed status and the edits it made inside the box",
   "capability_id": "cap_4ew83zqz",
   "source": "https://upstash.com/docs/box/overall/agent.md",
   "result": "done",
   "via": "sdk",
   "done_on": [
    "sdk"
   ]
  },
  {
   "id": "cap-20",
   "capability": "Schedule a recurring job inside a Box sandbox",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Box SDK schedules",
    "mcp": null,
    "cli": null,
    "ui": "Console > Box > Schedules"
   },
   "check": "Schedule list shows the cron expression and the box's logs show it ran at the scheduled time",
   "capability_id": "cap_3cw04j8g",
   "source": "https://upstash.com/docs/box/overall/schedules.md",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp"
   ]
  },
  {
   "id": "cap-21",
   "capability": "Create a Blob storage bucket",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Console/Developer API bucket create",
    "mcp": "blob create-bucket tool",
    "cli": null,
    "ui": "Console > Blob > Create Bucket"
   },
   "check": "Bucket appears in the console and accepts a Bucket client connection",
   "capability_id": "cap_z1bkrzzw",
   "source": "https://upstash.com/docs/blob/bucket/connecting.md",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp"
   ]
  },
  {
   "id": "cap-22",
   "capability": "Download or list files from a Blob bucket",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Bucket.get/list via @upstash/blob",
    "mcp": "blob read tool",
    "cli": null,
    "ui": "Console > Blob > Files"
   },
   "check": "Bucket.get returns the uploaded file's bytes byte-for-byte",
   "capability_id": "cap_9xbtt20b",
   "source": "https://upstash.com/docs/blob/bucket/reading.md",
   "result": "done",
   "via": "sdk",
   "done_on": [
    "sdk"
   ]
  },
  {
   "id": "cap-23",
   "capability": "Delete a file or prefix from a Blob bucket",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Bucket.delete via @upstash/blob",
    "mcp": "blob delete tool",
    "cli": null,
    "ui": "Console > Blob > Files"
   },
   "check": "Bucket.get for the deleted path returns not-found",
   "capability_id": "cap_g545z88p",
   "source": "https://upstash.com/docs/blob/bucket/deleting.md",
   "result": "done",
   "via": "sdk",
   "done_on": [
    "sdk"
   ]
  },
  {
   "id": "cap-24",
   "capability": "Create a signed URL for a private Blob object",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Bucket.sign via @upstash/blob",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "The signed URL fetched directly returns the object; the same path without a signature is rejected",
   "capability_id": "cap_g0ya91gj",
   "source": "https://upstash.com/docs/blob/reference/signing.md",
   "result": "done",
   "via": "sdk",
   "done_on": [
    "sdk"
   ]
  },
  {
   "id": "cap-25",
   "capability": "Set a Blob bucket's cache behavior",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Bucket.put cacheControl option",
    "mcp": null,
    "cli": null,
    "ui": "Console > Blob > Bucket settings"
   },
   "check": "Response headers for the object reflect the configured cache option (immutable/revalidate/no-store)",
   "capability_id": "cap_c0hx1af4",
   "source": "https://upstash.com/docs/blob/bucket/caching.md",
   "result": "done",
   "via": "sdk",
   "done_on": [
    "sdk"
   ]
  },
  {
   "id": "cap-26",
   "capability": "List databases and read their connection details",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET /v2/redis/databases (Developer API)",
    "mcp": "list-databases tool",
    "cli": null,
    "ui": "Console > Databases"
   },
   "check": "Response lists every database the account owns with its endpoint and region",
   "capability_id": "cap_xqrrtrx2",
   "source": "https://upstash.com/docs/devops/developer-api/redis/list_databases.md",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-27",
   "capability": "Read database usage stats and insights",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /v2/redis/stats/{id}, GET /v2/redis/insights/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Console > Redis > Usage"
   },
   "check": "Response returns throughput, latency and bandwidth series for the database",
   "capability_id": "cap_n0zefvzh",
   "source": "https://upstash.com/docs/devops/developer-api/redis/get_database_insights.md",
   "result": "done",
   "via": "mcp",
   "done_on": [
    "mcp",
    "api"
   ]
  },
  {
   "id": "cap-28",
   "capability": "Invite a member to a team",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/teams/team/member",
    "mcp": null,
    "cli": null,
    "ui": "Console > Team > Members"
   },
   "check": "GET /v2/teams/members/{teamId} lists the invited member",
   "capability_id": "cap_3w8sjh12",
   "source": "https://upstash.com/docs/devops/developer-api/teams/add_team_member.md",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  },
  {
   "id": "cap-29",
   "capability": "Set a monthly spend budget on a database",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/redis/update-budget",
    "mcp": null,
    "cli": null,
    "ui": "Console > Redis > Budget"
   },
   "check": "Get Database endpoint reflects the updated monthly budget value",
   "capability_id": "cap_fzv501vs",
   "source": "https://upstash.com/docs/devops/developer-api/redis/update_budget.md",
   "result": "plan_gated",
   "via": "api",
   "counted": false
  },
  {
   "id": "cap-30",
   "capability": "Read the account's audit log",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /v2/audit-logs",
    "mcp": null,
    "cli": null,
    "ui": "Console > Account > Audit Log"
   },
   "check": "Response lists recent account actions with actor and timestamp",
   "capability_id": "cap_xgs80797",
   "source": "https://upstash.com/docs/devops/developer-api/account/list_audit_logs.md",
   "result": "done",
   "via": "api",
   "done_on": [
    "api"
   ]
  }
 ],
 "stale": false,
 "unreachable_since": null,
 "not_driven_since": null,
 "icon": "/logos/upstash.png",
 "agent_kinds": {
  "browser": {
   "who": "An assistant in a browser",
   "passed": [],
   "stop": "signup",
   "why": null,
   "tone": "neutral",
   "text": "Sign-up wasn't tried in this drive."
  },
  "direct": {
   "who": "An agent talking to it directly",
   "passed": [
    "credentials",
    "first_call",
    "first_action"
   ],
   "stop": "pay",
   "why": "reaches the checkout, stopped at the $0.20 per 100K commands charge",
   "tone": "warn",
   "text": "Without an account (no key needed) it gets an API key, makes its first API call and does all of the core work. Payment: reaches the checkout, stopped at the $0.20 per 100K commands charge."
  }
 },
 "sdk": null,
 "surface_reach": {
  "surfaces": {
   "api": true,
   "mcp": true,
   "cli": true
  },
  "read_at": "2026-10-31T01:41:24Z"
 },
 "connect": {
  "mcp": {
   "url": "https://mcp.upstash.com/mcp",
   "transport": "streamable-http",
   "state": "tested",
   "tools": {
    "count": 74,
    "names": [
     "redis_list_databases",
     "redis_get_database",
     "redis_get_stats",
     "redis_get_insights",
     "redis_get_traffic",
     "redis_list_backups",
     "redis_create_database",
     "redis_create_backup",
     "redis_rename_database",
     "redis_set_eviction",
     "redis_set_auto_upgrade",
     "redis_change_plan",
     "redis_set_prod_pack",
     "redis_set_budget",
     "redis_update_read_regions",
     "redis_reset_credentials",
     "redis_delete_database",
     "redis_run_command",
     "qstash_list_users",
     "qstash_get_stats",
     "qstash_list_schedules",
     "qstash_flow_control_get",
     "logs_list",
     "dlq_list",
     "qstash_publish_message",
     "qstash_flow_control_manage",
     "qstash_manage_schedule",
     "workflow_manage_run",
     "dlq_manage",
     "qstash_set_plan",
     "qstash_set_prod_pack",
     "qstash_set_budget",
     "qstash_reset_token",
     "index_list",
     "index_get",
     "index_get_stats",
     "index_info",
     "index_list_namespaces",
     "index_fetch",
     "index_range",
     "index_create",
     "index_set_plan",
     "index_reset_credentials",
     "index_update",
     "index_rename_namespace",
     "index_delete",
     "index_delete_documents",
     "index_reset",
     "index_delete_namespace",
     "vector_query",
     "search_query",
     "vector_upsert",
     "search_upsert",
     "box_logs",
     "box_metrics",
     "box_account",
     "box_browser",
     "box_git",
     "box_manage",
     "box_exec",
     "box_schedules",
     "box_config",
     "box_env",
     "box_preview",
     "box_runs",
     "box_snapshots",
     "box_apikey",
     "blob_bucket",
     "blob_upload_url",
     "blob_download_url",
     "blob_object",
     "upstash_console",
     "console_redis_keys",
     "console_redis_value"
    ],
    "read_at": "2026-10-31"
   }
  },
  "cli": {
   "install": "npm install -g upstash",
   "package": "upstash",
   "ecosystem": "npm",
   "source": "https://upstash.com/",
   "state": "documented"
  },
  "api": {
   "base_url": "https://api.upstash.com/v2",
   "state": "documented"
  },
  "signup": {
   "url": "https://console.upstash.com/",
   "state": "tested"
  },
  "docs": {
   "url": "https://upstash.com/docs/introduction",
   "state": "tested"
  }
 },
 "surface_sources": {
  "mcp": "https://mcp.upstash.com/mcp",
  "docs": "https://upstash.com/docs/introduction",
  "llms_txt": "https://upstash.com/llms.txt",
  "cli": "https://upstash.com/",
  "api": "https://upstash.com/docs/devops/developer-api/redis/list_databases",
  "sdk": "https://upstash.com/docs",
  "openapi": "https://upstash.com/openapi.json",
  "pay": "https://projects.dev/providers/"
 },
 "copilot_connector": null,
 "stripe_directory": {
  "name": "Upstash, Inc.",
  "profile": "upstash",
  "routes": [
   "projects",
   "app"
  ],
  "source": "https://docs.stripe.com/directory",
  "checked": "2026-10-29"
 },
 "in_stripe_directory": "upstash",
 "stripe_projects": {
  "provider": "Upstash",
  "free_tier": false,
  "services": 4,
  "source": "https://projects.dev/providers/",
  "checked": "2026-11-01"
 },
 "pay_rails": [],
 "stop_evidence": null,
 "wall_vendor": null,
 "mcp_sign_in": {
  "sign_in": true,
  "prm": true,
  "registration": "dcr",
  "device": false
 },
 "safety_issues": 2,
 "fix_counts": {
  "small": 4,
  "medium": 1,
  "large": 1,
  "total": 6
 },
 "evidence_sha256": "e333b73b1e5112a1a5db5f062254aaa19006bade0a45378d6d008f705b861cc7",
 "first_seen": "2026-10-26",
 "license": {
  "name": "CC BY 4.0",
  "url": "https://creativecommons.org/licenses/by/4.0/"
 },
 "correction": {
  "status": "none",
  "open": 0,
  "since": null,
  "reply_by": null
 },
 "attribution": null,
 "confirmation": {
  "state": "confirmed",
  "drives": 2,
  "agree": 2,
  "review": null,
  "text": "2 drives agree"
 },
 "stop_shot": null,
 "stop_shot_hash": null,
 "attempts_count": 257,
 "detail": {
  "public": false,
  "in": [
   "report",
   "api"
  ],
  "since": "2026-10-17"
 },
 "what_it_does": "Upstash sells serverless data tools such as Redis, vector search, message queues, workflows, sandboxes and file storage.",
 "kind": "product",
 "rules_version": "rules-2026-10-30-42",
 "rules_url": "https://agentdrives.com/method/changelog#rules-2026-10-30-42",
 "category_median": {
  "holds_up": {
   "median": 74,
   "n": 9
  }
 },
 "peers": {
  "API-03": {
   "basis": "category",
   "n": 11,
   "below": 0,
   "above": 3,
   "quartile": 2
  },
  "API-07": {
   "basis": "category",
   "n": 11,
   "below": 2,
   "above": 0,
   "quartile": 3
  },
  "DOCS-08": {
   "basis": "category",
   "n": 12,
   "below": 10,
   "above": 0,
   "quartile": 4
  },
  "DOCS-10": {
   "basis": "category",
   "n": 12,
   "below": 1,
   "above": 4,
   "quartile": 2
  },
  "DOCS-11": {
   "basis": "category",
   "n": 12,
   "below": 0,
   "above": 2,
   "quartile": 2
  },
  "ERR-01": {
   "basis": "category",
   "n": 12,
   "below": 0,
   "above": 0,
   "quartile": 3
  },
  "ERR-02": {
   "basis": "category",
   "n": 12,
   "below": 1,
   "above": 4,
   "quartile": 2
  },
  "ERR-03": {
   "basis": "category",
   "n": 12,
   "below": 1,
   "above": 1,
   "quartile": 3
  },
  "ERR-04": {
   "basis": "all",
   "n": 36,
   "below": 0,
   "above": 12,
   "percentile": 33
  },
  "ERR-07": {
   "basis": "category",
   "n": 8,
   "below": 4,
   "above": 2
  },
  "IN-03": {
   "basis": "category",
   "n": 10,
   "below": 0,
   "above": 0,
   "quartile": 3
  },
  "IN-08": {
   "basis": "category",
   "n": 12,
   "below": 0,
   "above": 8,
   "quartile": 1
  },
  "IN-11": {
   "basis": "category",
   "n": 13,
   "below": 9,
   "above": 0,
   "quartile": 4
  },
  "IN-12": {
   "basis": "category",
   "n": 13,
   "below": 3,
   "above": 0,
   "quartile": 3
  },
  "LEAVE-03": {
   "basis": "category",
   "n": 12,
   "below": 4,
   "above": 5,
   "quartile": 2
  },
  "LIM-01": {
   "basis": "all",
   "n": 10,
   "below": 5,
   "above": 0,
   "quartile": 4
  },
  "LIM-02": {
   "basis": "category",
   "n": 5,
   "below": 4,
   "above": 0
  },
  "MCP-03": {
   "basis": "category",
   "n": 7,
   "below": 0,
   "above": 0
  },
  "MCP-04": {
   "basis": "category",
   "n": 7,
   "below": 2,
   "above": 1
  },
  "MCP-05": {
   "basis": "category",
   "n": 7,
   "below": 0,
   "above": 2
  },
  "MCP-06": {
   "basis": "category",
   "n": 7,
   "below": 0,
   "above": 1
  },
  "MCP-07": {
   "basis": "category",
   "n": 7,
   "below": 4,
   "above": 0
  },
  "MCP-08": {
   "basis": "all",
   "n": 37,
   "below": 15,
   "above": 11,
   "percentile": 55
  },
  "MCP-09": {
   "basis": "all",
   "n": 32,
   "below": 0,
   "above": 28,
   "percentile": 6
  },
  "MCP-11": {
   "basis": "category",
   "n": 7,
   "below": 1,
   "above": 2
  },
  "PAY-05": {
   "basis": "category",
   "n": 13,
   "below": 6,
   "above": 3,
   "quartile": 3
  },
  "PROTO-02": {
   "basis": "category",
   "n": 8,
   "below": 0,
   "above": 0
  }
 },
 "probe": {
  "checked": "2026-11-01",
  "status": "ok",
  "sign_up_page": "page",
  "wall": "none",
  "llms_txt": true,
  "mcp": "login",
  "openapi": true,
  "payment_402": false,
  "payment_rails": [],
  "files": {
   "openapi": {
    "url": "https://upstash.com/docs/devops/developer-api/openapi.yaml",
    "found": true
   },
   "llms_txt": {
    "url": "https://upstash.com/llms.txt",
    "found": true
   },
   "llms_full": {
    "url": "https://upstash.com/llms-full.txt",
    "found": true
   }
  }
 },
 "probe_history": [
  {
   "checked": "2026-11-01",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": true,
   "mcp": "login",
   "openapi": true,
   "payment_402": false,
   "payment_rails": []
  },
  {
   "checked": "2026-10-31",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": true,
   "mcp": "login",
   "openapi": true,
   "payment_402": false,
   "payment_rails": []
  },
  {
   "checked": "2026-10-30",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": true,
   "mcp": "login",
   "openapi": true,
   "payment_402": false,
   "payment_rails": []
  },
  {
   "checked": "2026-10-29",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": true,
   "mcp": "login",
   "openapi": true,
   "payment_402": false,
   "payment_rails": []
  },
  {
   "checked": "2026-10-28",
   "status": "ok",
   "sign_up_page": "page",
   "wall": "none",
   "llms_txt": true,
   "mcp": "login",
   "openapi": true,
   "payment_402": false,
   "payment_rails": []
  }
 ],
 "surface_changes": [],
 "agent_reports": null,
 "verdict": "L4 · Runs on its own: our agent got in on its own and did the core work. It stopped first at pay: paid plans need a card added in the console's Stripe form, and the record shows no 402 or x402 route for an agent. POST /start-redis gave a working Redis with no account. After a browser sign-up, our agent worked through the official MCP server and the APIs in Redis, Vector, QStash, Workflow, Box and Blob. It stayed on the free plan, so there was nothing to cancel. Deleting the account is a browser path under Account > Settings, with no API, CLI or MCP route.",
 "changes": {
  "source": "store",
  "drives": [
   {
    "run": "20261026T123949Z",
    "date": "2026-10-26",
    "level": 4,
    "stop": null,
    "entry": "self-start",
    "driver": 5,
    "listed": true,
    "paid": false,
    "agent_paid": null
   },
   {
    "run": "20261031T051021Z",
    "date": "2026-10-31",
    "level": 4,
    "stop": null,
    "entry": "self-start",
    "driver": 5,
    "listed": true,
    "paid": false,
    "agent_paid": null
   }
  ],
  "events": [],
  "feed": "https://agentdrives.com/api/tools/upstash/changes.json"
 },
 "agreement": {
  "drives": 2,
  "agree": 2
 },
 "method_release": "2026-Q4.27",
 "found": {
  "agent_blockers": 2,
  "surface_issues": 0
 },
 "agent_surfaces": {
  "api": {
   "state": "tested",
   "reachable": true,
   "documented": 151,
   "tested": 135,
   "source": "https://upstash.com/docs/devops/developer-api/redis/list_databases"
  },
  "mcp": {
   "state": "tested",
   "reachable": true,
   "documented": 75,
   "tested": 63,
   "source": "https://mcp.upstash.com/mcp"
  },
  "cli": {
   "state": "tested",
   "reachable": true,
   "documented": 70,
   "tested": 56,
   "source": "https://upstash.com/"
  },
  "sdk": {
   "state": "tested",
   "documented": 14,
   "tested": 14,
   "source": "https://upstash.com/docs"
  },
  "docs": {
   "state": "tested",
   "documented": 1519,
   "tested": 600,
   "source": "https://upstash.com/docs/introduction"
  },
  "payment": {
   "state": "documented",
   "documented": null,
   "tested": null,
   "source": "https://projects.dev/providers/"
  }
 },
 "issues_found": 2,
 "rank": 1,
 "rank_of": 9,
 "rank_change": null,
 "rank_since": "2026-10-26",
 "links": {
  "category": [
   {
    "label": "Data and storage",
    "href": "https://agentdrives.com/categories/data"
   },
   {
    "label": "Databases",
    "href": "https://agentdrives.com/categories/databases"
   }
  ],
  "tasks": [
   {
    "label": "Invite a member",
    "href": "https://agentdrives.com/tasks/invite-a-member"
   },
   {
    "label": "Create a database",
    "href": "https://agentdrives.com/tasks/create-a-database"
   },
   {
    "label": "Read usage and quotas",
    "href": "https://agentdrives.com/tasks/read-usage-and-quotas"
   },
   {
    "label": "Query records with filters",
    "href": "https://agentdrives.com/tasks/query-records-with-filters"
   },
   {
    "label": "Upload a file",
    "href": "https://agentdrives.com/tasks/upload-a-file"
   },
   {
    "label": "List databases and read their schema",
    "href": "https://agentdrives.com/tasks/list-databases-and-read-their-schema"
   }
  ],
  "walls": [],
  "vendors": [],
  "standards": [
   {
    "label": "MCP",
    "href": "https://agentdrives.com/standards/mcp",
    "note": "tools an agent can call"
   },
   {
    "label": "OpenAPI",
    "href": "https://agentdrives.com/standards/openapi",
    "note": "its API, described"
   },
   {
    "label": "llms.txt",
    "href": "https://agentdrives.com/standards/llms-txt",
    "note": "its docs, listed for agents"
   }
  ],
  "steps": [
   {
    "label": "Find",
    "href": "https://agentdrives.com/access/find"
   },
   {
    "label": "Get in",
    "href": "https://agentdrives.com/access/get-in"
   },
   {
    "label": "Use",
    "href": "https://agentdrives.com/access/use"
   },
   {
    "label": "Pay",
    "href": "https://agentdrives.com/access/pay"
   },
   {
    "label": "Leave",
    "href": "https://agentdrives.com/access/leave"
   }
  ],
  "rivals": [
   {
    "label": "Airtable",
    "href": "https://agentdrives.com/tools/airtable",
    "slug": "airtable",
    "level": 4
   },
   {
    "label": "Convex",
    "href": "https://agentdrives.com/tools/convex",
    "slug": "convex",
    "level": 4
   },
   {
    "label": "Couchbase",
    "href": "https://agentdrives.com/tools/couchbase",
    "slug": "couchbase",
    "level": 4
   }
  ],
  "compare": [],
  "rail": [
   {
    "label": "Watch this product",
    "href": "https://agentdrives.com/watch"
   },
   {
    "label": "Get the data",
    "href": "https://agentdrives.com/data#plans"
   }
  ]
 },
 "capability_matrix": [
  {
   "id": "cap-01",
   "name": "Store a key-value pair in Redis",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "done",
    "cli": "done",
    "ui": "untried"
   }
  },
  {
   "id": "cap-02",
   "name": "Run a vector search",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-03",
   "name": "Publish a reliable HTTP message/background job via QStash",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-04",
   "name": "Build a durable multi-step workflow",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-05",
   "name": "Create a cloud sandbox (Box)",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-06",
   "name": "Upload a file to Blob storage",
   "core": true,
   "result": "done",
   "surfaces": {
    "api": "untried",
    "mcp": "done",
    "cli": "done",
    "ui": "untried"
   }
  },
  {
   "id": "cap-07",
   "name": "Create a Redis database",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "untried",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-08",
   "name": "Back up and restore a Redis database",
   "core": false,
   "result": "plan",
   "surfaces": {
    "api": "untried",
    "mcp": "plan",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-09",
   "name": "Add read regions to a Redis Global Database",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-10",
   "name": "Run a full-text/hybrid search over Redis data",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "untried",
    "mcp": "done",
    "cli": "untried",
    "ui": "none"
   }
  },
  {
   "id": "cap-11",
   "name": "Filter a vector query by metadata",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "untried",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-12",
   "name": "Create embeddings with a built-in model",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "untried",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-13",
   "name": "Schedule a recurring QStash message (cron)",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "untried",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-14",
   "name": "Retry or inspect a failed message from the Dead Letter Queue",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-15",
   "name": "Run shell commands inside a Box sandbox",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-16",
   "name": "Read and write files in a Box sandbox",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-17",
   "name": "Expose a Box sandbox process on a public URL",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "untried",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-18",
   "name": "Snapshot and restore a Box sandbox",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-19",
   "name": "Delegate a task to the box's built-in coding agent",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-20",
   "name": "Schedule a recurring job inside a Box sandbox",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "untried",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-21",
   "name": "Create a Blob storage bucket",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "untried",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-22",
   "name": "Download or list files from a Blob bucket",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-23",
   "name": "Delete a file or prefix from a Blob bucket",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-24",
   "name": "Create a signed URL for a private Blob object",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "none"
   }
  },
  {
   "id": "cap-25",
   "name": "Set a Blob bucket's cache behavior",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-26",
   "name": "List databases and read their connection details",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-27",
   "name": "Read database usage stats and insights",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "done",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-28",
   "name": "Invite a member to a team",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-29",
   "name": "Set a monthly spend budget on a database",
   "core": false,
   "result": "plan",
   "surfaces": {
    "api": "plan",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-30",
   "name": "Read the account's audit log",
   "core": false,
   "result": "done",
   "surfaces": {
    "api": "done",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  }
 ],
 "category_place": {
  "category": "databases",
  "products": 15,
  "higher": 0,
  "same_level": 5,
  "as_of": "2026-11-01",
  "stop": null,
  "rivals_by": "level",
  "rivals": [
   "airtable",
   "convex",
   "couchbase",
   "nocodb",
   "prisma"
  ]
 },
 "page": "https://agentdrives.com/tools/upstash?via=api"
}