{
 "$schema": "https://agentdrives.com/schemas/tool.schema.json",
 "id": "prd_01m57vgtmtej187feb1x3q3948",
 "ids": {
  "org": "org_01m57vgtmtpvb5q5q95dnnahr1",
  "surfaces": {
   "web": "srf_01m5xzmgbxbv4z8j1h720hfk5x",
   "api": "srf_01m5xzmgby9fk8tvac1a2ee9qr",
   "mcp": "srf_01m5xzmgbyen9jf3t7mr99ybck",
   "cli": "srf_01m5xzmgbysydttq5xvv8k8967",
   "sdk": "srf_01m5xzmgbyyjwjavq9642vjdp6"
  },
  "slugs": [
   "appwrite"
  ],
  "domain": "appwrite.io",
  "wikidata": "Q127672178",
  "mcp_registry": [
   "io.github.appwrite/mcp"
  ]
 },
 "slug": "appwrite",
 "name": "Appwrite",
 "url": "https://appwrite.io",
 "domain": "appwrite.io",
 "category": "databases",
 "category_name": "Databases",
 "tested_at": "2026-10-27",
 "run": "20261027T024717Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261027T024717Z",
   "date": "2026-10-27",
   "level": 1,
   "engine": {
    "model": "claude-opus-5-5",
    "driver": 5,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip",
    "version": "2026.10.27",
    "commit": "c6ddc4af6bc2a59607329551038738795ddebf78",
    "prompts": {
     "version": "2026.10.26",
     "commit": "9bef5e75f8e732d063fdfff8e766feca445cb123"
    },
    "rules": {
     "version": "2026.10.26",
     "commit": "cf67ac91a72987684eab8ae070c6dfd1b32f6dae"
    }
   },
   "stop": "signup",
   "paid": false,
   "agent_paid": null
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": 3,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 1,
  "self_start": false
 },
 "badges": [
  "agent-can-leave"
 ],
 "not_counted": null,
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "how": "robots"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "billing_api"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "how": "no-account",
   "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": "gaps"
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "how": "robots",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "billing_api",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "how": "no-account",
   "delete": {
    "state": "yes",
    "text": "Deletes its account",
    "why": null
   },
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": null,
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": "private",
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "current",
    "behind": null,
    "value": "cimd"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 2,
    "value": "3.0.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [
  {
   "capability": "Create or update a row/document",
   "probe": "row missing required column title",
   "outcome": "400 {\"message\": \"Invalid document structure: Missing required attribute \\\"title\\\"\", \"code\": 400, \"type\": \"row_invalid_structure\", \"version\": \"2.6.2\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create a storage bucket",
   "probe": "bad enum compression",
   "outcome": "400 {\"message\": \"Invalid `compression` param: Value must be one of (none, gzip, zstd)\", \"code\": 400, \"type\": \"general_argument_invalid\", \"version\": \"2.6.2\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create or update a row/document",
   "probe": "well-formed id that does not exist",
   "outcome": "404 {\"message\": \"Row with the requested ID 'doesnotexist123' could not be found.\", \"code\": 404, \"type\": \"row_not_found\", \"version\": \"2.6.2\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create or update a row/document",
   "probe": "repeat a create with the same rowId",
   "outcome": "409 {\"message\": \"Row with the requested ID 'fixed-1' already exists. Try again with a different ID or use ID.unique() to generate a unique ID.\", \"code\": 409, \"type\": \"row_already_exists\", \"version\": \"",
   "grade": "clear",
   "idempotent": "yes",
   "rate_limit": null
  },
  {
   "capability": "Create or update a row/document",
   "probe": "repeat a create with rowId unique (no idempotency key)",
   "outcome": "201 {\"note\": \"second row created, a duplicate\"}",
   "grade": "clear",
   "idempotent": "no",
   "rate_limit": null
  },
  {
   "capability": "Create a table or collection",
   "probe": "wrong API key",
   "outcome": "401 {\"message\": \"The current user is not authorized to perform the requested action.\", \"code\": 401, \"type\": \"user_unauthorized\", \"version\": \"2.6.2\"}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Authenticate an app's end users (email, OAuth, OTP)",
   "probe": "burst of wrong-password logins on one endpoint, stop at first 429",
   "outcome": "11 calls; last 429 headers {'X-Ratelimit-Limit': '10', 'X-Ratelimit-Remaining': '0', 'X-Ratelimit-Reset': '1793073600'} body {\"message\": \"Rate limit for the current endpoint has been exceeded. Please ",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": "clean"
  },
  {
   "capability": "Register a webhook",
   "probe": "webhook URL on a private address",
   "outcome": "400 {\"message\": \"Invalid `url` param: 1. Value must be a valid URL with following schemes (http, https) \\n2. Value must be a public domain \\n\", \"code\": 400, \"type\": \"general_argument_invalid\", \"versio",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  }
 ],
 "surface_audit": null,
 "coverage_core": null,
 "coverage_own": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 5,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false
 },
 "methodology": 42,
 "rules_date": "2026-10-30",
 "engine": {
  "model": "claude-opus-5-5",
  "driver": 5,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "skip",
  "version": "2026.10.27",
  "commit": "c6ddc4af6bc2a59607329551038738795ddebf78",
  "prompts": {
   "version": "2026.10.26",
   "commit": "9bef5e75f8e732d063fdfff8e766feca445cb123"
  },
  "rules": {
   "version": "2026.10.26",
   "commit": "cf67ac91a72987684eab8ae070c6dfd1b32f6dae"
  }
 },
 "same_level_drives": 1,
 "drives": 1,
 "same_stop_drives": 1,
 "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": "robots"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-27"
  },
  "browser": {
   "state": "unknown",
   "measured": false
  },
  "our_key": "verified",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt, .md docs pages, setup.md, the agent-skills index and the MCP and CLI docs fetched without a browser; the OpenAPI 3.0.0 spec is on GitHub (appwrite/specs), the site's /openapi.json redirect answers 400"
  },
  "signup": {
   "status": "blocked",
   "cause": "robots_named",
   "note": "robots.txt disallows sign-up for AI agents (/sign-up): the groups ChatGPT-User, Claude-User, Claude-SearchBot, OAI-SearchBot, PerplexityBot and Google-Extended (and *) all carry Disallow: /sign-up and /sign-in. cloud.appwrite.io/console/register redirects to appwrite.io. No documented sign-up API."
  },
  "verify": {
   "status": "",
   "note": "Not reached: no account",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Not reached: keys are made in a project of a Cloud account; the CLI device login (`appwrite login`, code at https://appwrite.io/oauth2/device) and the MCP OAuth both need an existing account",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "Not reached: every Cloud API call needs a project and a key or session",
   "route": "account",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Not reached",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P3",
   "rails": [
    "card (Stripe)",
    "console billing API"
   ],
   "rail_ids": [
    "card"
   ],
   "first_party": false,
   "rail_scope": "full",
   "trial_path": "free tier",
   "route": "billing_api",
   "checkout": {
    "reached": "no",
    "processor": "other",
    "captcha": "none",
    "three_ds": "not_seen",
    "card_form": false,
    "phone_field": "none",
    "wallets": [],
    "rail_offer": "none",
    "price": "25.00",
    "currency": "USD",
    "period": "month",
    "plan": "Pro",
    "last_button": ""
   },
   "person": "none",
   "ours": "robots.txt (no Cloud account)",
   "note": "No payment went through. The published OpenAPI spec has a console billing API (POST /organizations with billingPlan and paymentMethodId, /account/payment-methods, plan estimations), and the pricing FAQ says \"Appwrite currently supports credit and debit card payments\" (Pro $25/month; the page config carries a Stripe publishable key). No 402, x402, MPP or Stripe Projects listing was found and nothing was paid. The checkout is in the Cloud console behind sign-in, which robots.txt closes to AI agents, so the walk stopped before a plan page.",
   "detected_grade": "P3",
   "exercised": false,
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "Nothing to cancel: no account, no plan started. The published spec carries plan and downgrade operations under /organizations (billing API); not exercised.",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "headless",
   "note": "On the self-hosted instance the project, organization and account were deleted and the login was refused afterwards (401). No Cloud account was made, so nothing was stored on Cloud.",
   "account": false
  }
 },
 "routes": [
  {
   "route": "local",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "in",
   "wall": {
    "type": null,
    "owner": "ours"
   },
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 8,
   "browser": false
  },
  {
   "route": "device_login",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "consent_needs_account",
    "owner": "product"
   },
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 1,
   "browser": null
  },
  {
   "route": "person_key",
   "offered": "documented",
   "tried": false,
   "not_tried": "assisted_only",
   "result": null,
   "wall": null,
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": null,
   "browser": null
  }
 ],
 "checkout": {
  "reached": "no",
  "rail_offer": "none",
  "period": "month",
  "price": "25.00",
  "currency": "USD",
  "plan": "Pro"
 },
 "docs": {
  "at": "2026-10-27",
  "read": 588,
  "listed": 737,
  "sampled": true,
  "overall": "gaps",
  "getting_started": "found",
  "auth": "found",
  "errors": "found",
  "examples": "good",
  "freshness": "unknown",
  "newest": null,
  "core_pages": "8 of 8",
  "capabilities": "covered",
  "label": "Some gaps"
 },
 "claims": null,
 "pay_options": {
  "checked": "2026-10-27",
  "source": "probe",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": false,
  "detected_grade": "P3",
  "trial": {
   "no_card": null,
   "card_required": null,
   "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."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "urls": {
  "docs": "https://appwrite.io/docs",
  "llms_txt": "https://appwrite.io/llms.txt",
  "mcp": "https://mcp.appwrite.io/mcp"
 },
 "surface_notes": {
  "api": "REST, 1100 operations in the published spec (2.6.2), plus GraphQL",
  "openapi": "3.0.0, published on GitHub (appwrite/specs); no per-operation error responses",
  "cli": "appwrite-cli 28.9.0, device-code login",
  "sdk": "node-appwrite 31.0.0, appwrite (web) 29.1.0",
  "mcp": "official hosted server (OAuth) with 4 tools in docs; local stdio server 1.0.27 with 3 tools",
  "webhooks": "project webhooks"
 },
 "surface_sizes": [
  {
   "kind": "api",
   "listed": 1100,
   "tested": 538
  },
  {
   "kind": "mcp",
   "listed": 5,
   "tested": 3
  },
  {
   "kind": "cli",
   "listed": 883,
   "tested": 556
  },
  {
   "kind": "sdk",
   "listed": 236,
   "tested": 171
  }
 ],
 "can_do": [
  "Stand up its own self-hosted Appwrite and get a console account, project and scoped API key without a browser",
  "Create databases, tables and columns and read them back",
  "Write, update, query (filters, ordering, full-text search) and delete rows",
  "Register app end users, log them in and manage their MFA",
  "Create buckets, upload, transform, share by expiring token and delete files",
  "Subscribe to live row changes over the realtime WebSocket",
  "Drive the same project through the REST API, the CLI, the Node SDK and the local MCP server"
 ],
 "cannot_do": [
  {
   "what": "Get an Appwrite Cloud account",
   "why": "robots.txt disallows /sign-up and /sign-in for AI agents and there is no sign-up API"
  },
  {
   "what": "Use the hosted MCP server, the CLI login or a Cloud API key",
   "why": "All need a Cloud account"
  },
  {
   "what": "Buy a plan",
   "why": "The checkout is in the console behind sign-in; cards only"
  },
  {
   "what": "Deploy functions or sites on the self-hosted copy here",
   "why": "They need the Docker-backed orchestrator"
  }
 ],
 "blockers": [
  "robots.txt disallows sign-up and sign-in for AI agents"
 ],
 "tips_for_agents": [
  "Appwrite Cloud is closed to agent sign-up by robots.txt; for your own copy, run the self-hosted edition (appwrite/appwrite image) and create the console account with POST /v1/account using project console",
  "On self-hosted, use the local MCP server: pip/uvx mcp-server-appwrite with APPWRITE_ENDPOINT, APPWRITE_PROJECT_ID and APPWRITE_API_KEY; it speaks MCP 2026-07-28 over stdio",
  "With the MCP server, call appwrite_search_tools first to get the hidden tool name, then appwrite_call_tool with confirm_write true for writes",
  "Use custom row ids instead of ID.unique when you may retry: a repeat then returns 409 row_already_exists instead of a duplicate",
  "Columns and indexes are created asynchronously (202, status processing): poll the columns list until status is available before writing rows",
  "In CLI 28.9.0 use `appwrite client --endpoint --project-id --key` for browser-free work and `push tables|buckets --all --force`; there is no `deploy` command"
 ],
 "selfhost": {
  "install": {
   "status": "headless",
   "minutes": 8,
   "note": "The documented installer needs /our records and the docs ask 4GB RAM. Not run: ClickHouse (usage and execution logs) and the open-runtimes orchestrator, which needs the Docker socket (ORCHESTRATOR_BACKEND=docker), so functions and sites could not deploy."
  },
  "ladder": {
   "docs": {
    "status": "headless",
    "note": "Self-hosting and installation docs fetched as .md"
   },
   "signup": {
    "status": "headless",
    "note": "Console account made with the Account API (POST /v1/account, project console) on our own instance"
   },
   "verify": {
    "status": "n/a",
    "note": "No email verification needed on a self-hosted instance without SMTP"
   },
   "credentials": {
    "status": "headless",
    "note": "`appwrite login --endpoint --email --password`; org via POST /v1/teams, project via `appwrite organization create-project`, API key via POST /v1/project/keys"
   },
   "first_call": {
    "status": "headless",
    "note": "GET /v1/tablesdb 200 with the key",
    "route": "account"
   },
   "first_action": {
    "status": "headless",
    "note": "Database shopdb and table products created"
   },
   "pay": {
    "status": "n/a",
    "grade": "n/a",
    "note": "Self-hosted edition is free"
   },
   "cancel": {
    "status": "n/a",
    "grade": "n/a",
    "tested": false,
    "note": "Nothing to cancel"
   },
   "delete": {
    "status": "headless",
    "note": "Project, organization and account deleted; login refused afterwards (401)",
    "left": "deleted",
    "after_hours": null
   }
  },
  "coverage_core": 75,
  "coverage_source": "computed"
 },
 "edge_case": "none",
 "summary": "Its self-hosted edition stood up without a browser in about 8 minutes, and there an agent did the data, auth and storage work end to end through the API, CLI, Node SDK and the local MCP server. Functions and sites could not deploy here because they need Docker.",
 "wall": "robots.txt closes sign-up to AI agents",
 "plan_scope": "",
 "robots_stop": "signup",
 "robots": {
  "rule": "named",
  "step": "signup",
  "seen": "2026-10-27",
  "held": false
 },
 "terms": null,
 "terms_read": "2026-10-27",
 "email_gate": null,
 "plain": {
  "summary": "Appwrite is a backend service for apps: databases, user login, file storage and functions. On the hosted cloud an agent could not make an account, because the site's robots.txt closes sign-up to AI agents. On a self-hosted copy it set itself up in minutes and did the database, login and storage work end to end; functions and sites need Docker and were not tried.",
  "can_do": [
   "Run its own self-hosted Appwrite and create an account, project and API key without a browser",
   "Create databases, tables and columns, and read them back",
   "Add, change, search and delete rows",
   "Register app users, log them in and set up two-step login",
   "Create storage buckets, upload, resize, share by expiring link and delete files",
   "Receive live updates when data changes",
   "Use the same project through the API, the command line, the Node SDK and the local MCP server"
  ],
  "cannot_do": [
   {
    "what": "Get an Appwrite Cloud account",
    "why": "robots.txt closes sign-up and sign-in to AI agents; no sign-up API"
   },
   {
    "what": "Use the hosted MCP server, the CLI login or a Cloud API key",
    "why": "All of them need a Cloud account"
   },
   {
    "what": "Buy a plan",
    "why": "Checkout is in the console behind sign-in; cards only"
   },
   {
    "what": "Deploy functions or sites on the self-hosted copy here",
    "why": "They need Docker"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Add a read replica",
   "plan": "paid compute tier",
   "evidence": "https://appwrite.io/pricing \"HA replicas - Full tier price per replica\""
  },
  {
   "capability": "Back up a database",
   "plan": "paid",
   "evidence": "Plan paid (https://appwrite.io/pricing); self-hosted GET /v1/backups/policies 404"
  },
  {
   "capability": "Connect a custom domain",
   "plan": "paid",
   "evidence": ""
  },
  {
   "capability": "Firewall and rate-limit rules",
   "plan": "paid",
   "evidence": ""
  },
  {
   "capability": "Download invoices",
   "plan": "paid",
   "evidence": ""
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "capability": "Create a table or collection",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /databases/{id}/tables",
    "mcp": "appwrite_call_tool (databases)",
    "cli": "appwrite push databases",
    "ui": "Console > Databases > Create table"
   },
   "check": "GET /databases/{id}/tables/{tableId} returns the new table",
   "capability_id": "cap_ec6ajdnd",
   "source": "https://appwrite.io/products/databases",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-02",
   "capability": "Create or update a row/document",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST/PATCH /databases/{id}/tables/{id}/rows",
    "mcp": "appwrite_call_tool (databases)",
    "cli": "appwrite push databases",
    "ui": "Console > Databases > table > Add row"
   },
   "check": "GET /databases/{id}/tables/{id}/rows/{rowId} shows the written fields",
   "capability_id": "cap_m34x9t4v",
   "source": "https://appwrite.io/products/databases",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-03",
   "capability": "Query rows with filters",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /databases/{id}/tables/{id}/rows?queries=...",
    "mcp": "appwrite_call_tool (databases)",
    "cli": "appwrite list",
    "ui": "Console > Databases > table > filter bar"
   },
   "check": "Response total/documents match the applied Query.equal/Query.greaterThan filter",
   "capability_id": "cap_bsb5z2vr",
   "source": "https://appwrite.io/docs/products/databases/queries",
   "result": "failed",
   "via": "cli"
  },
  {
   "id": "cap-04",
   "capability": "Deploy a serverless function",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /functions/{id}/deployments",
    "mcp": "appwrite_call_tool (functions)",
    "cli": "appwrite deploy functions",
    "ui": "Console > Functions > Create deployment"
   },
   "check": "GET /functions/{id}/deployments/{deploymentId} status becomes ready and executions succeed",
   "capability_id": "cap_kdfqww03",
   "source": "https://appwrite.io/products/functions",
   "result": "failed",
   "via": "cli"
  },
  {
   "id": "cap-05",
   "capability": "Authenticate an app's end users (email, OAuth, OTP)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /account/sessions/email, POST /account (create user)",
    "mcp": "appwrite_call_tool (users/account)",
    "cli": "appwrite run auth",
    "ui": "Console > Auth > Users"
   },
   "check": "GET /account returns the authenticated user's session after login",
   "capability_id": "cap_hmk55v09",
   "source": "https://appwrite.io/products/auth",
   "result": "failed",
   "via": "cli"
  },
  {
   "id": "cap-06",
   "capability": "Upload a file",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /storage/buckets/{id}/files",
    "mcp": "appwrite_call_tool (storage)",
    "cli": "appwrite push storage",
    "ui": "Console > Storage > bucket > Upload"
   },
   "check": "GET /storage/buckets/{id}/files/{fileId} returns file metadata with matching size/name",
   "capability_id": "cap_facpbh70",
   "source": "https://appwrite.io/products/storage",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-07",
   "capability": "Create a storage bucket",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /storage/buckets",
    "mcp": "appwrite_call_tool (storage)",
    "cli": "appwrite push storage",
    "ui": "Console > Storage > Create bucket"
   },
   "check": "GET /storage/buckets/{id} returns the bucket with configured permissions",
   "capability_id": "cap_z1bkrzzw",
   "source": "https://appwrite.io/products/storage",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-08",
   "capability": "Deploy a site from Git",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /sites/{id}/deployments",
    "mcp": "appwrite_call_tool (sites)",
    "cli": "appwrite deploy sites",
    "ui": "Console > Sites > Create deployment"
   },
   "check": "GET /sites/{id}/deployments/{deploymentId} status becomes ready and the generated URL serves the site",
   "capability_id": "cap_5q1cx94d",
   "source": "https://appwrite.io/products/sites",
   "result": "failed",
   "via": "cli"
  },
  {
   "id": "cap-09",
   "capability": "Add or change a table/collection column",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /databases/{id}/tables/{id}/columns/string (and similar per type)",
    "mcp": "appwrite_call_tool (databases)",
    "cli": "appwrite deploy databases",
    "ui": "Console > Databases > table > Columns > Add"
   },
   "check": "GET /databases/{id}/tables/{id}/columns/{key} shows the new column definition",
   "capability_id": "cap_47me9ba3",
   "source": "https://appwrite.io/products/databases",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-10",
   "capability": "Delete a row/document",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "DELETE /databases/{id}/tables/{id}/rows/{rowId}",
    "mcp": "appwrite_call_tool (databases)",
    "cli": "appwrite list / console",
    "ui": "Console > Databases > table > row > Delete"
   },
   "check": "GET on the deleted row returns 404",
   "capability_id": "cap_z5zsc472",
   "source": "https://appwrite.io/docs/products/databases",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-11",
   "capability": "Set row/document-level permissions",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "permissions array on table/row create (e.g. Permission.read(Role.user(id)))",
    "mcp": "appwrite_call_tool (databases)",
    "cli": "appwrite push databases",
    "ui": "Console > Databases > table > Permissions"
   },
   "check": "A request from a disallowed user/role receives 401, an allowed one succeeds",
   "capability_id": "cap_49bc6r5r",
   "source": "https://appwrite.io/products/auth",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-12",
   "capability": "Run a full-text or vector search",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Query.search on DocumentsDB / VectorsDB endpoints",
    "mcp": "appwrite_call_tool (databases)",
    "cli": "appwrite list",
    "ui": null
   },
   "check": "Search query returns rows ranked by relevance for the indexed text/vector field",
   "capability_id": "cap_0gwx7zby",
   "source": "https://appwrite.io/products/databases",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-13",
   "capability": "Add a read replica to a database",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /databases/{id}/replicas",
    "mcp": null,
    "cli": null,
    "ui": "Console > Databases > database > Replicas"
   },
   "check": "GET /databases/{id}/replicas lists the new replica as healthy",
   "capability_id": "cap_j8kyym81",
   "source": "https://appwrite.io/products/databases",
   "result": "plan_gated",
   "via": null,
   "counted": false
  },
  {
   "id": "cap-14",
   "capability": "Back up a database",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /databases/{id}/backups",
    "mcp": null,
    "cli": null,
    "ui": "Console > Databases > database > Backups"
   },
   "check": "GET /databases/{id}/backups/{backupId} status becomes completed",
   "capability_id": "cap_drp5sav8",
   "source": "https://appwrite.io/pricing",
   "result": "plan_gated",
   "via": null,
   "counted": false
  },
  {
   "id": "cap-15",
   "capability": "Create a database trigger (event-driven function)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /functions/{id} with events array e.g. databases.*.tables.*.rows.*.create",
    "mcp": "appwrite_call_tool (functions)",
    "cli": "appwrite push functions",
    "ui": "Console > Functions > function > Events"
   },
   "check": "Writing a matching row produces a new execution in /functions/{id}/executions",
   "capability_id": "cap_8zw3hzk9",
   "source": "https://appwrite.io/products/functions",
   "result": "blocked",
   "via": "api"
  },
  {
   "id": "cap-16",
   "capability": "Schedule a cron job (scheduled function)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /functions/{id} with schedule field",
    "mcp": "appwrite_call_tool (functions)",
    "cli": "appwrite push functions",
    "ui": "Console > Functions > function > Settings > Schedule"
   },
   "check": "GET /functions/{id}/executions shows executions firing on the configured cron cadence",
   "capability_id": "cap_3cw04j8g",
   "source": "https://appwrite.io/products/functions",
   "result": "blocked",
   "via": "api"
  },
  {
   "id": "cap-17",
   "capability": "Invoke a function",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /functions/{id}/executions",
    "mcp": "appwrite_call_tool (functions)",
    "cli": "appwrite run function",
    "ui": "Console > Functions > function > Execute now"
   },
   "check": "GET /functions/{id}/executions/{executionId} shows status completed with response body",
   "capability_id": "cap_fzs8hh2f",
   "source": "https://appwrite.io/products/functions",
   "result": "blocked",
   "via": "api"
  },
  {
   "id": "cap-18",
   "capability": "Read function execution logs",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /functions/{id}/executions/{executionId}/logs",
    "mcp": "appwrite_call_tool (functions)",
    "cli": "appwrite list",
    "ui": "Console > Functions > function > Executions > Logs"
   },
   "check": "Response includes stdout/stderr text produced by the function's own console output",
   "capability_id": "cap_dacsttk8",
   "source": "https://appwrite.io/products/functions",
   "result": "blocked",
   "via": "api"
  },
  {
   "id": "cap-19",
   "capability": "Transform an image on request",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /storage/buckets/{id}/files/{id}/preview?width=&height=&gravity=&output=",
    "mcp": "appwrite_call_tool (storage)",
    "cli": null,
    "ui": null
   },
   "check": "The returned image's dimensions/format match the requested width/height/output params",
   "capability_id": null,
   "unmapped": "own_feature",
   "source": "https://appwrite.io/products/storage",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-20",
   "capability": "Create an expiring shared file link",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /storage/buckets/{id}/files/{id}/tokens",
    "mcp": "appwrite_call_tool (storage)",
    "cli": null,
    "ui": "Console > Storage > file > Share"
   },
   "check": "The token URL serves the file without a session cookie until it expires, then returns 401",
   "capability_id": "cap_s5xdd6q5",
   "source": "https://appwrite.io/products/storage",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-21",
   "capability": "Delete a file",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "DELETE /storage/buckets/{id}/files/{id}",
    "mcp": "appwrite_call_tool (storage)",
    "cli": null,
    "ui": "Console > Storage > file > Delete"
   },
   "check": "GET on the deleted file returns 404",
   "capability_id": "cap_g545z88p",
   "source": "https://appwrite.io/products/storage",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-22",
   "capability": "Subscribe to live data changes",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "WSS /realtime?channels=databases.{id}.tables.{id}.rows.*",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "A write to the subscribed row/table emits a WebSocket event to the open connection",
   "capability_id": "cap_x20zx7f9",
   "source": "https://appwrite.io/products/realtime",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-23",
   "capability": "Configure sign-in methods (OAuth2, magic URL, OTP, phone)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /projects/{id}/auth/{method}",
    "mcp": "appwrite_call_tool (projects)",
    "cli": "appwrite push auth",
    "ui": "Console > Auth > Settings"
   },
   "check": "GET /projects/{id} shows the method enabled, and a login attempt using it succeeds",
   "capability_id": "cap_ss1c05tf",
   "source": "https://appwrite.io/products/auth",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-24",
   "capability": "Create a user group / team",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /teams",
    "mcp": "appwrite_call_tool (teams)",
    "cli": "appwrite push teams",
    "ui": "Console > Auth > Teams > Create"
   },
   "check": "GET /teams/{id} returns the team with its name and member count",
   "capability_id": "cap_yn12vxg9",
   "source": "https://appwrite.io/products/auth",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-25",
   "capability": "Send an email, SMS, or push message",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /messaging/messages/email (or /sms, /push)",
    "mcp": "appwrite_call_tool (messaging)",
    "cli": "appwrite push messages",
    "ui": "Console > Messaging > Create message"
   },
   "check": "GET /messaging/messages/{id} status moves to sent/delivered for the targeted user/topic",
   "capability_id": null,
   "unmapped": "bundle",
   "source": "https://appwrite.io/products/messaging",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-26",
   "capability": "Register a webhook",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/{id}/webhooks",
    "mcp": null,
    "cli": "appwrite push webhooks",
    "ui": "Console > Overview > Integrations > Webhooks"
   },
   "check": "A matching project event triggers an HTTP POST to the configured webhook URL",
   "capability_id": "cap_977hxacb",
   "source": "https://appwrite.io/pricing",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-27",
   "capability": "Enable two-factor authentication",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /account/mfa/authenticators/totp",
    "mcp": "appwrite_call_tool (account)",
    "cli": null,
    "ui": "Console > Account > Security"
   },
   "check": "GET /account shows mfa: true and login requires a second factor",
   "capability_id": "cap_9qz744jy",
   "source": "https://appwrite.io/products/auth",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-28",
   "capability": "Query the Appwrite API via GraphQL",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /graphql",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "A GraphQL query against a known resource returns the matching typed response",
   "capability_id": "cap_53z76bgf",
   "source": "https://appwrite.io/docs/apis/graphql",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-29",
   "capability": "Create an API key",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/{id}/keys",
    "mcp": null,
    "cli": "appwrite login",
    "ui": "Console > Overview > Integrations > API keys"
   },
   "check": null,
   "capability_id": "cap_wbg916v9",
   "unmapped": null,
   "source": "https://appwrite.io/docs/apis/rest",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-30",
   "capability": "Connect a custom domain",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "POST /sites/{id}/domains (or functions/storage)",
    "mcp": null,
    "cli": null,
    "ui": "Console > Sites > site > Domains"
   },
   "check": "GET /sites/{id}/domains/{domainId} shows status verified and TLS active",
   "capability_id": "cap_dj4n5a69",
   "source": "https://appwrite.io/pricing",
   "result": "plan_gated",
   "via": null,
   "counted": false
  },
  {
   "id": "cap-31",
   "capability": "Set a member's role or permissions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /teams/{id}/memberships with roles array",
    "mcp": "appwrite_call_tool (teams)",
    "cli": null,
    "ui": "Console > Settings > Members"
   },
   "check": "GET /teams/{id}/memberships/{id} shows the assigned roles",
   "capability_id": "cap_bs3hvrpm",
   "source": "https://appwrite.io/products/auth",
   "result": "not_tried",
   "via": null
  },
  {
   "id": "cap-32",
   "capability": "Read the audit log",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /account/logs (and /projects/{id}/logs)",
    "mcp": null,
    "cli": null,
    "ui": "Console > Overview > Activity"
   },
   "check": "A recent account/project action appears as a logged entry with timestamp and IP",
   "capability_id": "cap_xgs80797",
   "source": "https://appwrite.io/docs/advanced/security",
   "result": "failed",
   "via": "api"
  },
  {
   "id": "cap-33",
   "capability": "Set firewall and rate-limit rules",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Console > Firewall"
   },
   "check": "A request matching a configured block rule is rejected at the edge",
   "capability_id": "cap_zyxvz8gv",
   "source": "https://appwrite.io/products/firewall",
   "result": "plan_gated",
   "via": null,
   "counted": false
  },
  {
   "id": "cap-34",
   "capability": "Read usage and quotas",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET /projects/{id}/usage",
    "mcp": null,
    "cli": null,
    "ui": "Console > Organization > Usage"
   },
   "check": "Reported usage numbers increase after exercising a metered API (e.g. database reads)",
   "capability_id": "cap_n0zefvzh",
   "source": "https://appwrite.io/pricing",
   "result": "blocked",
   "via": "api"
  },
  {
   "id": "cap-35",
   "capability": "Download invoices",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Console > Organization > Billing"
   },
   "check": null,
   "capability_id": "cap_39r7q610",
   "unmapped": null,
   "source": "https://appwrite.io/pricing",
   "result": "plan_gated",
   "via": null,
   "counted": false
  }
 ],
 "stale": false,
 "unreachable_since": null,
 "not_driven_since": null,
 "icon": "/logos/appwrite.png",
 "agent_kinds": {
  "browser": {
   "who": "An assistant in a browser",
   "passed": [],
   "stop": "signup",
   "why": "its robots.txt disallows AI agents there",
   "tone": "wall",
   "text": "Stops at sign-up: its robots.txt disallows AI agents there."
  },
  "direct": {
   "who": "An agent talking to it directly",
   "passed": [],
   "stop": "signup",
   "why": "its robots.txt disallows AI agents there",
   "tone": "wall",
   "text": "Stops at sign-up: its robots.txt disallows AI agents there."
  }
 },
 "sdk": {
  "packages": [
   {
    "ecosystem": "npm",
    "name": "appwrite",
    "url": "https://www.npmjs.com/package/appwrite",
    "source": "https://raw.githubusercontent.com/appwrite/sdk-for-web/HEAD/package.json"
   },
   {
    "ecosystem": "npm",
    "name": "@appwrite.io/react",
    "url": "https://www.npmjs.com/package/@appwrite.io/react",
    "source": "https://raw.githubusercontent.com/appwrite/sdk-for-react/HEAD/package.json"
   },
   {
    "ecosystem": "npm",
    "name": "react-native-appwrite",
    "url": "https://www.npmjs.com/package/react-native-appwrite",
    "source": "https://raw.githubusercontent.com/appwrite/sdk-for-react-native/HEAD/package.json"
   }
  ],
  "read_at": "2026-10-31T20:54:44Z"
 },
 "surface_reach": {
  "surfaces": {
   "mcp": true,
   "cli": true
  },
  "read_at": "2026-10-31T01:38:48Z"
 },
 "connect": {
  "mcp": {
   "url": "https://mcp.appwrite.io/mcp",
   "transport": "streamable-http",
   "state": "documented",
   "tools": {
    "count": 5,
    "names": [
     "appwrite_get_context",
     "appwrite_search_tools",
     "appwrite_call_tool",
     "appwrite_call_write_tool",
     "appwrite_search_docs"
    ],
    "read_at": "2026-10-31"
   }
  },
  "cli": {
   "install": "npm install -g appwrite-cli",
   "package": "appwrite-cli",
   "ecosystem": "npm",
   "source": "https://appwrite.io/docs/tooling/command-line/installation",
   "state": "documented"
  },
  "api": {
   "base_url": "https://cloud.appwrite.io/v1",
   "state": "documented"
  },
  "docs": {
   "url": "https://appwrite.io/docs",
   "state": "tested"
  }
 },
 "surface_sources": {
  "mcp": "https://mcp.appwrite.io/mcp",
  "docs": "https://appwrite.io/docs",
  "llms_txt": "https://appwrite.io/llms.txt",
  "cli": "https://appwrite.io/docs/tooling/command-line/installation",
  "api": "https://appwrite.io/docs/references/cloud/server-nodejs/account",
  "sdk": "https://appwrite.io/docs/references/cloud/server-nodejs/tablesDB",
  "openapi": "https://appwrite.io/openapi.json"
 },
 "copilot_connector": null,
 "stripe_directory": null,
 "in_stripe_directory": null,
 "stripe_projects": null,
 "pay_rails": [],
 "stop_evidence": {
  "at": "signup",
  "date": "2026-10-27",
  "line": "robots.txt disallows sign-up for AI agents (/sign-up): the groups ChatGPT-User, Claude-User, Claude-SearchBot, OAI-SearchBot, PerplexityBot and Google-Extended (and *) all carry Disallow: /sign-up and /sign-in. cloud.appwrite.io/console/register redirects to appwrite.io. No documented sign-up API."
 },
 "wall_vendor": null,
 "mcp_sign_in": {
  "sign_in": true,
  "prm": true,
  "registration": "both",
  "device": true
 },
 "safety_issues": 2,
 "fix_counts": {
  "small": 6,
  "medium": 2,
  "large": 1,
  "total": 9
 },
 "evidence_sha256": "d164a455db0e5eb852a5da65690811b535bcb20fc5c753a7964006c448ccd3f9",
 "first_seen": "2026-10-27",
 "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": "awaiting",
  "drives": 1,
  "agree": 1,
  "review": null,
  "text": "1 drive, awaiting confirmation"
 },
 "stop_shot": null,
 "stop_shot_hash": null,
 "attempts_count": 145,
 "detail": {
  "public": false,
  "in": [
   "report",
   "api"
  ],
  "since": "2026-10-17"
 },
 "what_it_does": "Appwrite is a backend service for apps.",
 "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-04": {
   "basis": "category",
   "n": 10,
   "below": 5,
   "above": 0,
   "quartile": 4
  },
  "API-07": {
   "basis": "category",
   "n": 11,
   "below": 2,
   "above": 0,
   "quartile": 3
  },
  "DOCS-08": {
   "basis": "category",
   "n": 12,
   "below": 0,
   "above": 2,
   "quartile": 2
  },
  "DOCS-10": {
   "basis": "category",
   "n": 12,
   "below": 8,
   "above": 0,
   "quartile": 4
  },
  "DOCS-11": {
   "basis": "category",
   "n": 12,
   "below": 10,
   "above": 0,
   "quartile": 4
  },
  "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": 0,
   "above": 4
  },
  "FIND-06": {
   "basis": "category",
   "n": 10,
   "below": 0,
   "above": 0,
   "quartile": 3
  },
  "IN-08": {
   "basis": "category",
   "n": 12,
   "below": 4,
   "above": 0,
   "quartile": 3
  },
  "IN-11": {
   "basis": "category",
   "n": 13,
   "below": 0,
   "above": 11,
   "quartile": 1
  },
  "IN-12": {
   "basis": "category",
   "n": 13,
   "below": 3,
   "above": 0,
   "quartile": 3
  },
  "LEAVE-03": {
   "basis": "category",
   "n": 12,
   "below": 7,
   "above": 0,
   "quartile": 4
  },
  "PAY-04": {
   "basis": "all",
   "n": 24,
   "below": 4,
   "above": 6,
   "percentile": 46
  },
  "PAY-05": {
   "basis": "category",
   "n": 13,
   "below": 10,
   "above": 0,
   "quartile": 4
  },
  "PROTO-02": {
   "basis": "category",
   "n": 8,
   "below": 0,
   "above": 0
  }
 },
 "probe": {
  "checked": "2026-11-01",
  "status": "ok",
  "sign_up_page": "robots",
  "wall": "robots",
  "llms_txt": true,
  "mcp": "login",
  "openapi": false,
  "payment_402": null,
  "payment_rails": [],
  "files": {
   "openapi": {
    "url": null,
    "found": false
   },
   "llms_txt": {
    "url": "https://appwrite.io/llms.txt",
    "found": true
   },
   "llms_full": {
    "url": "https://appwrite.io/llms-full.txt",
    "found": true
   }
  }
 },
 "probe_history": [
  {
   "checked": "2026-11-01",
   "status": "ok",
   "sign_up_page": "robots",
   "wall": "robots",
   "llms_txt": true,
   "mcp": "login",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-31",
   "status": "ok",
   "sign_up_page": "robots",
   "wall": "robots",
   "llms_txt": true,
   "mcp": "login",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-30",
   "status": "ok",
   "sign_up_page": "robots",
   "wall": "robots",
   "llms_txt": true,
   "mcp": "login",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-29",
   "status": "ok",
   "sign_up_page": "robots",
   "wall": "robots",
   "llms_txt": true,
   "mcp": "login",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  },
  {
   "checked": "2026-10-28",
   "status": "ok",
   "sign_up_page": "robots",
   "wall": "robots",
   "llms_txt": true,
   "mcp": "login",
   "openapi": false,
   "payment_402": null,
   "payment_rails": []
  }
 ],
 "surface_changes": [],
 "agent_reports": null,
 "verdict": "L1 · Needs a person: our agent couldn't get in on its own at Appwrite Cloud. Our agent stopped at sign-up, where robots.txt disallows /sign-up for AI agents and no documented sign-up API exists. Verify, the key, the first call and the first action were not reached, because keys are made in a Cloud account. The CLI device login and MCP OAuth both need an existing account. The self-hosted edition worked: our agent did data, auth and storage work through the API, CLI, Node SDK and local MCP server. Payment was not reached, since the Cloud checkout sits behind sign-in.",
 "changes": {
  "source": "store",
  "drives": [
   {
    "run": "20261027T024717Z",
    "date": "2026-10-27",
    "level": 1,
    "stop": "signup",
    "entry": "closed",
    "driver": 5,
    "listed": true,
    "paid": false,
    "agent_paid": null
   }
  ],
  "events": [],
  "feed": "https://agentdrives.com/api/tools/appwrite/changes.json"
 },
 "agreement": null,
 "method_release": "2026-Q4.27",
 "found": {
  "agent_blockers": 1,
  "surface_issues": null
 },
 "agent_surfaces": {
  "api": {
   "state": "tested",
   "reachable": true,
   "documented": 1100,
   "tested": 538,
   "source": "https://appwrite.io/docs/references/cloud/server-nodejs/account"
  },
  "mcp": {
   "state": "tested",
   "reachable": true,
   "documented": 5,
   "tested": 3,
   "source": "https://mcp.appwrite.io/mcp"
  },
  "cli": {
   "state": "tested",
   "reachable": true,
   "documented": 883,
   "tested": 556,
   "source": "https://appwrite.io/docs/tooling/command-line/installation"
  },
  "sdk": {
   "state": "tested",
   "documented": 236,
   "tested": 171,
   "source": "https://appwrite.io/docs/references/cloud/server-nodejs/tablesDB"
  },
  "docs": {
   "state": "tested",
   "documented": 737,
   "tested": 588,
   "source": "https://appwrite.io/docs"
  },
  "payment": {
   "state": "none_found",
   "documented": null,
   "tested": null,
   "source": null
  }
 },
 "issues_found": 1,
 "rank": null,
 "rank_of": 9,
 "rank_change": null,
 "rank_since": null,
 "links": {
  "category": [
   {
    "label": "Data and storage",
    "href": "https://agentdrives.com/categories/data"
   },
   {
    "label": "Databases",
    "href": "https://agentdrives.com/categories/databases"
   }
  ],
  "tasks": [],
  "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",
    "note": "stopped here"
   },
   {
    "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": "Baserow",
    "href": "https://agentdrives.com/tools/baserow",
    "slug": "baserow",
    "level": 1
   },
   {
    "label": "CockroachDB",
    "href": "https://agentdrives.com/tools/cockroachlabs",
    "slug": "cockroachlabs",
    "level": 1
   },
   {
    "label": "MongoDB Atlas",
    "href": "https://agentdrives.com/tools/mongodb",
    "slug": "mongodb",
    "level": 1
   }
  ],
  "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": "Create a table or collection",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-02",
   "name": "Create or update a row/document",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-03",
   "name": "Query rows with filters",
   "core": true,
   "result": "blocked",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "blocked",
    "ui": "untried"
   }
  },
  {
   "id": "cap-04",
   "name": "Deploy a serverless function",
   "core": true,
   "result": "blocked",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "blocked",
    "ui": "untried"
   }
  },
  {
   "id": "cap-05",
   "name": "Authenticate an app's end users (email, OAuth, OTP)",
   "core": true,
   "result": "blocked",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "blocked",
    "ui": "untried"
   }
  },
  {
   "id": "cap-06",
   "name": "Upload a file",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-07",
   "name": "Create a storage bucket",
   "core": true,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-08",
   "name": "Deploy a site from Git",
   "core": true,
   "result": "blocked",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "blocked",
    "ui": "untried"
   }
  },
  {
   "id": "cap-09",
   "name": "Add or change a table/collection column",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-10",
   "name": "Delete a row/document",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-11",
   "name": "Set row/document-level permissions",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-12",
   "name": "Run a full-text or vector search",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "none"
   }
  },
  {
   "id": "cap-13",
   "name": "Add a read replica to a database",
   "core": false,
   "result": "plan",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-14",
   "name": "Back up a database",
   "core": false,
   "result": "plan",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-15",
   "name": "Create a database trigger (event-driven function)",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "blocked",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-16",
   "name": "Schedule a cron job (scheduled function)",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "blocked",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-17",
   "name": "Invoke a function",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "blocked",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-18",
   "name": "Read function execution logs",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "blocked",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-19",
   "name": "Transform an image on request",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "none"
   }
  },
  {
   "id": "cap-20",
   "name": "Create an expiring shared file link",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-21",
   "name": "Delete a file",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-22",
   "name": "Subscribe to live data changes",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "none"
   }
  },
  {
   "id": "cap-23",
   "name": "Configure sign-in methods (OAuth2, magic URL, OTP, phone)",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-24",
   "name": "Create a user group / team",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-25",
   "name": "Send an email, SMS, or push message",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-26",
   "name": "Register a webhook",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-27",
   "name": "Enable two-factor authentication",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-28",
   "name": "Query the Appwrite API via GraphQL",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "none"
   }
  },
  {
   "id": "cap-29",
   "name": "Create an API key",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "untried",
    "ui": "untried"
   }
  },
  {
   "id": "cap-30",
   "name": "Connect a custom domain",
   "core": false,
   "result": "plan",
   "surfaces": {
    "api": "untried",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-31",
   "name": "Set a member's role or permissions",
   "core": false,
   "result": "untried",
   "surfaces": {
    "api": "untried",
    "mcp": "untried",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-32",
   "name": "Read the audit log",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "blocked",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-33",
   "name": "Set firewall and rate-limit rules",
   "core": false,
   "result": "plan",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-34",
   "name": "Read usage and quotas",
   "core": false,
   "result": "blocked",
   "surfaces": {
    "api": "blocked",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  },
  {
   "id": "cap-35",
   "name": "Download invoices",
   "core": false,
   "result": "plan",
   "surfaces": {
    "api": "none",
    "mcp": "none",
    "cli": "none",
    "ui": "untried"
   }
  }
 ],
 "category_place": {
  "category": "databases",
  "products": 15,
  "higher": 9,
  "same_level": 5,
  "as_of": "2026-11-01",
  "stop": "signup",
  "rivals_by": "stop",
  "rivals": [
   "baserow",
   "cockroachlabs",
   "firebase-google",
   "mongodb",
   "supabase",
   "turso"
  ]
 },
 "page": "https://agentdrives.com/tools/appwrite?via=api"
}