{
 "source": "https://agentdrives.com",
 "license": "CC BY 4.0",
 "generated": "2026-10-16T07:50:43.045Z",
 "methodology": 15,
 "rules_date": "2026-10-15",
 "levels": [
  {
   "n": 0,
   "name": "Read-only",
   "short": "Agents can read about it, but there is nothing to use.",
   "long": "No API, CLI or MCP server. Agents can read about it, but there is nothing for them to use."
  },
  {
   "n": 1,
   "name": "Needs a person",
   "short": "Agents can't get in on their own.",
   "long": "There is an API, CLI or MCP server, but an agent can't get in on its own: a person has to sign up, verify or make the key. What it does once a person sets it up shows next to the level."
  },
  {
   "n": 2,
   "name": "Gets in",
   "short": "An agent gets in on its own but does less than half the core work.",
   "long": "An agent gets in on its own, by any way the product offers: its own sign-up, a key by API, pay per call or no key at all. It does less than half the core work, or the work isn't measured yet."
  },
  {
   "n": 3,
   "name": "Does the work",
   "short": "An agent gets in on its own and does half the core work or more.",
   "long": "An agent gets in on its own and does at least half the core work, each task read back."
  },
  {
   "n": 4,
   "name": "Runs on its own",
   "short": "An agent does the core work and can stop paying on its own.",
   "long": "An agent gets in on its own, does at least 80% of the core work and can stop paying on its own: it cancels any plan it started, or there is nothing to cancel. Whether it can also remove what it made shows next to the level."
  },
  {
   "n": 5,
   "name": "Autonomous",
   "short": "All of that, and it pays on its own for the work.",
   "long": "Everything in L4, and the agent pays on its own for the work it does: a payment we made and checked on the product's agent payment route, such as x402 or MPP, that buys credits or a plan for its account, or pays per call for at least 80% of the core work.",
   "free": {
    "short": "All of that, and nothing to pay.",
    "long": "Everything in L4, and there is nothing to pay for."
   }
  }
 ],
 "tools": [
  {
   "slug": "parallel",
   "name": "Parallel",
   "domain": "parallel.ai",
   "icon": "/logos/parallel.png",
   "category": "search-apis",
   "category_name": "Search APIs",
   "tested_at": "2026-10-15",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 5,
   "level_name": "Autonomous",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-buy"
   ],
   "summary": "An agent can search and extract through Parallel's free anonymous MCP server and pay per call with x402 or MPP for search, extract, responses and research, all without an account. Signing up by email link works without a bot check and the CLI's device login plus the Account API give a key headlessly, but on a new account every paid endpoint answers 402 until a card is saved, so only monitor management works. The account cannot be deleted without emailing support.",
   "parts": {
    "holds_up": 80,
    "docs_match": null,
    "setup": 100,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: no key needed, pay per call, sign-up in a browser",
     "way": "keyless"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 80% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "yes",
     "text": "Pays on its own: paid $0.01 a call (x402), 15 Oct",
     "value": "paid",
     "route": "agent_rail",
     "per_call": {
      "caps": [
       "cap-01",
       "cap-02",
       "cap-03",
       "cap-10"
      ],
      "core": 5,
      "share": 80
     }
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: no key needed, pay per call, sign-up in a browser",
     "way": "keyless",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 80% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "yes",
     "text": "Pays on its own: paid $0.01 a call (x402), 15 Oct",
     "value": "paid",
     "route": "agent_rail",
     "per_call": {
      "caps": [
       "cap-01",
       "cap-02",
       "cap-03",
       "cap-10"
      ],
      "core": 5,
      "share": 80
     },
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "keyless",
     "label": "No key needed",
     "routes": [
      "keyless"
     ],
     "minutes": 1,
     "core": "2/5"
    },
    {
     "key": "pay_per_call",
     "label": "Pay per call",
     "routes": [
      "pay_per_call"
     ],
     "minutes": 1,
     "core": "4/5"
    },
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [
      "magic_link",
      "device_login"
     ],
     "minutes": 1.5,
     "core": "3/5"
    }
   ],
   "minutes": 1,
   "next": {
    "to": null,
    "text": "Does it all on its own, payment included"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "4/5",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 6,
   "pay": "P4",
   "pays_with": [
    "stripe-projects",
    "x402",
    "mpp"
   ],
   "paid": true,
   "first_blocker": "API calls need credit; credit needs a card",
   "coverage_core": 80,
   "mcp": "official",
   "ways_in": [
    "keyless",
    "pay_per_call",
    "device_login"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/parallel?via=api",
   "json": "https://agentdrives.com/api/tools/parallel.json?via=api"
  },
  {
   "slug": "attio",
   "name": "Attio",
   "domain": "attio.com",
   "icon": "/logos/attio.png",
   "category": "crm",
   "category_name": "CRM",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Once a token exists, an agent can run almost all of Attio's CRM core over a clean, well-documented REST API and an official 41-tool MCP server: every core capability was done and verified. Getting there takes a browser: sign-up with an emailed code, token creation in settings, and one OAuth consent click for MCP. Workflows, sequences and billing are browser-only, and SQL is Enterprise-only.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "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 card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: cancels on its own, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "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 card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: cancels on its own, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 0.3,
     "core": "8/8"
    }
   ],
   "minutes": 0.3,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "8/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 4,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Sign-up and API tokens are web-only",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/attio?via=api",
   "json": "https://agentdrives.com/api/tools/attio.json?via=api"
  },
  {
   "slug": "steel",
   "name": "Steel",
   "domain": "steel.dev",
   "icon": "/logos/steel.png",
   "category": "browser-infrastructure",
   "category_name": "Browser infrastructure",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-buy"
   ],
   "summary": "An agent can do almost all of Steel through its API, SDK, CLI or official MCP server: sessions over CDP, scrape/screenshot/PDF, profiles, stored logins, files and extensions all worked and read back. Getting in needs a browser (email link sign-up and a dashboard key), CAPTCHA solving and proxies need $10 of paid balance bought by card, and pay-per-call x402 covers scrape, screenshot and PDF with no account.",
   "parts": {
    "holds_up": 84,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: pay per call, sign-up in a browser",
     "way": "pay_per_call"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 100% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Pays per call for part of it: paid $0.01 a call (x402), 12 Oct",
     "value": "partial",
     "route": "agent_rail",
     "per_call": {
      "caps": [
       "cap-04"
      ],
      "core": 8,
      "share": 12
     }
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; deletes its data, but the login stays",
     "at": "delete",
     "left": "data_only"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: pay per call, sign-up in a browser",
     "way": "pay_per_call",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 100% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Pays per call for part of it: paid $0.01 a call (x402), 12 Oct",
     "value": "partial",
     "route": "agent_rail",
     "per_call": {
      "caps": [
       "cap-04"
      ],
      "core": 8,
      "share": 12
     },
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; deletes its data, but the login stays",
     "at": "delete",
     "left": "data_only",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "pay_per_call",
     "label": "Pay per call",
     "routes": [
      "pay_per_call"
     ],
     "minutes": 0.5,
     "core": "1/8"
    },
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [
      "magic_link"
     ],
     "minutes": 5,
     "core": "8/8"
    }
   ],
   "minutes": 0.5,
   "next": {
    "to": 5,
    "text": "Next: let an agent buy credits or a plan without a person"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "8/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P4",
   "pays_with": [
    "stripe-projects",
    "x402"
   ],
   "paid": true,
   "first_blocker": "Email sign-up and dashboard-only API key",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [
    "pay_per_call"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/steel?via=api",
   "json": "https://agentdrives.com/api/tools/steel.json?via=api"
  },
  {
   "slug": "agentmail",
   "name": "AgentMail",
   "domain": "agentmail.to",
   "icon": "/logos/agentmail.png",
   "category": "email-infrastructure",
   "category_name": "Email infrastructure",
   "tested_at": "2026-10-14",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "An agent can sign up, verify, get a key and run all nine core email tasks headless through the API, the official MCP server (the 28 Jul 2026 spec) and the CLI, with clear errors and working idempotency. It cannot delete its account (no route) or reach billing, since the console sits behind Cloudflare checks; free accounts may mail only 3 new recipients in their first hour.",
   "parts": {
    "holds_up": 82,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: key by API",
     "way": "api_signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 100% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: an agent payment on its API, none made yet",
     "value": "ready",
     "route": "agent_rail"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: key by API",
     "way": "api_signup",
     "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: an agent payment on its API, none made yet",
     "value": "ready",
     "route": "agent_rail",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "key_by_api",
     "label": "Key by API",
     "routes": [
      "api_signup"
     ],
     "minutes": 1.5,
     "core": "9/9"
    }
   ],
   "minutes": 1.5,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": "pay",
   "coverage_source": "computed",
   "core": "9/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 6,
   "drives": 6,
   "pay": "P3",
   "pays_with": [
    "stripe-projects",
    "x402"
   ],
   "paid": false,
   "first_blocker": "No account delete; console behind Cloudflare checks",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [
    "api_signup"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/agentmail?via=api",
   "json": "https://agentdrives.com/api/tools/agentmail.json?via=api"
  },
  {
   "slug": "cloudinary",
   "name": "Cloudinary",
   "domain": "cloudinary.com",
   "icon": "/logos/cloudinary.png",
   "category": "file-storage",
   "category_name": "File storage",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "One unauthenticated API call gives an agent a working Cloudinary cloud, and from there all 9 core capabilities ran headless through REST, the CLI and three remote MCP servers, verified by reading state back. The Console is where an agent stops: its password setup has a reCAPTCHA, upgrading is a card form there, and deleting the account takes a support ticket.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 100% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 100% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 1.7,
     "core": "9/9"
    }
   ],
   "minutes": 1.7,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "9/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Console password reCAPTCHA; account delete needs support",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/cloudinary?via=api",
   "json": "https://agentdrives.com/api/tools/cloudinary.json?via=api"
  },
  {
   "slug": "airtable",
   "name": "Airtable",
   "domain": "airtable.com",
   "icon": "/logos/airtable.png",
   "category": "databases",
   "category_name": "Databases",
   "tested_at": "2026-10-15",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent can run almost all of Airtable's core once it has a token: REST and the official MCP server (46 tools) covered bases, records, schema, webhooks, automations, interfaces and forms, and Omni and field agents worked in the browser. Getting in needs a browser: sign-up is blocked headless, tokens are made only in the web UI, a workspace must be created in the UI, and automations can only be turned on there. Paying is a Stripe card form in the app; no agent rail or billing API.",
   "parts": {
    "holds_up": 78,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: MCP sign-in, sign-up in a browser",
     "way": "email_password"
    },
    {
     "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 $24 a month charge",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes what it made",
     "left": "removed"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ],
     "docs": "gaps"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: MCP sign-in, sign-up in a browser",
     "way": "email_password",
     "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 $24 a month charge",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes what it made",
     "left": "removed",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "mcp_signin",
     "label": "MCP sign-in",
     "routes": [
      "oauth_consent"
     ],
     "minutes": 3,
     "core": "6/10"
    },
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [
      "email_password"
     ],
     "minutes": 4,
     "core": "10/10"
    }
   ],
   "minutes": 3,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "10/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "HUMAN",
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-15",
    "held": false
   },
   "same_level_drives": 4,
   "drives": 5,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "API tokens only made in the browser",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [
    "email_password",
    "oauth_consent"
   ],
   "docs_overall": "gaps",
   "monitored": false,
   "url": "https://agentdrives.com/tools/airtable?via=api",
   "json": "https://agentdrives.com/api/tools/airtable.json?via=api"
  },
  {
   "slug": "basecamp",
   "name": "Basecamp",
   "domain": "basecamp.com",
   "icon": "/logos/basecamp.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Basecamp is one of the most agent-ready products we've driven: a plain form POST signs up a free account, and the official CLI with its built-in MCP server, the REST API and the SDKs covered all nine core capabilities. The one browser step is approving the OAuth device code, and each token reaches only the account chosen there. Paying, cancelling and deleting are web-only, and paid trials need no card.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 80,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "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 card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: cancels on its own, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an OpenAPI and an MCP server",
     "have": [
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "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 card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: cancels on its own, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 3.1,
     "core": "9/9"
    }
   ],
   "minutes": 3.1,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "9/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "hCaptcha (script loaded, invisible)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Browser approval needed for first API key",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/basecamp?via=api",
   "json": "https://agentdrives.com/api/tools/basecamp.json?via=api"
  },
  {
   "slug": "docuseal",
   "name": "DocuSeal",
   "domain": "docuseal.com",
   "icon": "/logos/docuseal.png",
   "category": "e-signature",
   "category_name": "E-signature",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent signed up, got an API key (after an email code) and ran the full template-to-signed-PDF workflow headless through the documented REST API; all 7 core capabilities verified, with signer steps done in a browser by design. On the free plan the API runs as the Developer Sandbox; production API, webhooks and team features are Pro via Stripe Checkout with a card, and account deletion is web-only.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 2,
      "value": "2025-06-18"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     },
     {
      "standard": "A2A",
      "state": "current",
      "behind": null,
      "value": "1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: key by API"
    },
    {
     "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 card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an OpenAPI",
     "have": [
      "llms_txt",
      "openapi"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: key by API",
     "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 card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "key_by_api",
     "label": "Key by API",
     "routes": [],
     "minutes": 5.2,
     "core": "7/7"
    }
   ],
   "minutes": 5.2,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": "pay",
   "coverage_source": "computed",
   "core": "7/7",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "",
   "coverage_core": 100,
   "mcp": "docs",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/docuseal?via=api",
   "json": "https://agentdrives.com/api/tools/docuseal.json?via=api"
  },
  {
   "slug": "zulip",
   "name": "Zulip",
   "domain": "zulip.com",
   "icon": "/logos/zulip.png",
   "category": "team-chat",
   "category_name": "Team chat",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Zulip Cloud Free can be run almost entirely by an agent through its documented REST API: all 7 core capabilities and most secondary ones were done and read back, and the organization was deactivated by API. Only the sign-up form needs a browser, for an invisible ALTCHA proof-of-work that cleared on its own. No MCP, llms.txt or agent payment rail; paying is Stripe Checkout with a card.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 70,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.1"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "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 card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an OpenAPI and an MCP server",
     "have": [
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "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 card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 5.6,
     "core": "7/7"
    }
   ],
   "minutes": 5.6,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "7/7",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "ALTCHA proof-of-work (first-party widget, /json/antispam_challenge)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Sign-up form needs one browser visit",
   "coverage_core": 100,
   "mcp": "third-party",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/zulip?via=api",
   "json": "https://agentdrives.com/api/tools/zulip.json?via=api"
  },
  {
   "slug": "formbricks",
   "name": "Formbricks",
   "domain": "formbricks.com",
   "icon": "/logos/formbricks.png",
   "category": "forms",
   "category_name": "Forms",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent can run Formbricks nearly end to end. After a browser sign-up with no CAPTCHA and a one-time API key from the UI, the REST API and the official OAuth MCP server cover the whole survey lifecycle: create, edit with logic, publish, collect, read, update and delete responses, plus webhooks and targeting. All 8 core capabilities were done and verified. What stays in the browser: sign-up, key creation, tags, segments, billing and account deletion. Follow-ups, workflows and Unify Feedback need paid plans beyond the no-card trial.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "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 card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: cancels on its own, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "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 card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: cancels on its own, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 6.2,
     "core": "8/8"
    }
   ],
   "minutes": 6.2,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "8/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/formbricks?via=api",
   "json": "https://agentdrives.com/api/tools/formbricks.json?via=api"
  },
  {
   "slug": "nocodb",
   "name": "NocoDB",
   "domain": "nocodb.com",
   "icon": "/logos/nocodb.png",
   "category": "databases",
   "category_name": "Databases",
   "tested_at": "2026-10-03",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Once it holds a token, an agent can run most of NocoDB on the free plan: bases, tables, fields, records, views, sharing, CSV import, workflows, interfaces and dashboards all worked, mostly over the official MCP server, and NocoAI built a table from one sentence in the web app. Getting in needs a browser (sign-up form, emailed code, token page), a workflow needs a human click to go live, and several REST groups are plan-gated or unreachable with any token.",
   "parts": {
    "holds_up": 59,
    "docs_match": 59,
    "setup": 100,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "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 card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "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 card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 6.6,
     "core": "10/10"
    }
   ],
   "minutes": 6.6,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "10/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Sign-up and first API key need a browser",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/nocodb?via=api",
   "json": "https://agentdrives.com/api/tools/nocodb.json?via=api"
  },
  {
   "slug": "firecrawl",
   "name": "Firecrawl",
   "domain": "firecrawl.dev",
   "icon": "/logos/firecrawl.png",
   "category": "web-scraping",
   "category_name": "Web scraping",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "Firecrawl's core works for an agent: scrape, crawl, map, search, extract, actions, agent and parse all ran and read back on the free plan, and scrape/search/parse even work keyless through MCP or the API. Getting your own key still needs a browser (web sign-up, PKCE email link, dashboard or cli-auth Authorize), since agent registration only accepts WorkOS ID-JAG. Leaving is web-only: the agent deleted the account in the dashboard, and we could not confirm the deletion took effect.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: no key needed"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 100% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: a billing API, none made yet",
     "value": "ready",
     "route": "billing_api"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: no key needed",
     "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: a billing API, none made yet",
     "value": "ready",
     "route": "billing_api",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "keyless",
     "label": "No key needed",
     "routes": [
      "keyless"
     ],
     "minutes": 8.3,
     "core": "8/8"
    }
   ],
   "minutes": 8.3,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": "pay",
   "coverage_source": "computed",
   "core": "8/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "Google reCAPTCHA (invisible)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 3,
   "pay": "P3",
   "pays_with": [
    "stripe-projects"
   ],
   "paid": false,
   "first_blocker": "Sign-up and first key need a browser",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/firecrawl?via=api",
   "json": "https://agentdrives.com/api/tools/firecrawl.json?via=api"
  },
  {
   "slug": "pipedream",
   "name": "Pipedream",
   "domain": "pipedream.com",
   "icon": "/logos/pipedream.png",
   "category": "automation",
   "category_name": "Automation",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Pipedream Connect's core (connected accounts, tool runs via REST and MCP, proxy, triggers, webhooks) worked headless and verified on the free plan once credentials existed. Sign-up and the first OAuth client need the web app, buying a plan needs a card in Stripe Checkout, and account deletion is web-only and showed a 500 while succeeding.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 4,
      "value": "2024-11-05"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.4"
     },
     {
      "standard": "A2A",
      "state": "behind",
      "behind": 1,
      "value": "0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "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 card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "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 card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 10.3,
     "core": "4/4"
    }
   ],
   "minutes": 10.3,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "4/4",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Sign-up and first key need a browser; a plan needs a card in Stripe Checkout",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/pipedream?via=api",
   "json": "https://agentdrives.com/api/tools/pipedream.json?via=api"
  },
  {
   "slug": "browserless",
   "name": "Browserless",
   "domain": "browserless.io",
   "icon": "/logos/browserless.png",
   "category": "browser-infrastructure",
   "category_name": "Browser infrastructure",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "With a token, an agent can do nearly everything in Browserless headless: REST, BrowserQL, Puppeteer, the Agent Run API and a 16-tool MCP server all worked on the Free plan and were verified. Sign-up (email OTP, no CAPTCHA), getting the token, and cancel/delete are web UI only, and there is no agent payment rail. Persisted session state did not survive a reconnect, and profile creation failed with an unclear error.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 100% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: cancels on its own, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 100% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: cancels on its own, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 14.1,
     "core": "8/8"
    }
   ],
   "minutes": 14.1,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "8/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Sign-up and API token only in web UI",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/browserless?via=api",
   "json": "https://agentdrives.com/api/tools/browserless.json?via=api"
  },
  {
   "slug": "tally",
   "name": "Tally",
   "domain": "tally.so",
   "icon": "/logos/tally.png",
   "category": "forms",
   "category_name": "Forms",
   "tested_at": "2026-10-01",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Once a browser sign-up has produced an API key, Tally is very easy for an agent to work with. The REST API, the official MCP server (`https://api.tally.so/mcp`, 26 tools) and the markdown docs let an agent create, edit, publish, read and clean up forms headless, and almost everything worked on the first try. The weak points are at the edges. Sign-up, email verification and API key creation happen only in the web app. Pro-gated endpoints answer `401 You are not authorized` rather than saying a plan is needed. Drop-off analytics on the Free plan returned invented sample numbers. Upgrading and account deletion happen only in the browser.\n\n**Scores:** overall 70 · coverage 64 · access 55 · reliability 78 · docs 86 · core coverage 100%",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "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 card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "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 card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": null,
     "core": null
    }
   ],
   "minutes": null,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "API keys only via the website",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/tally?via=api",
   "json": "https://agentdrives.com/api/tools/tally.json?via=api"
  },
  {
   "slug": "anchorbrowser",
   "name": "Anchor Browser",
   "domain": "anchorbrowser.io",
   "icon": "/logos/anchorbrowser.png",
   "category": "browser-infrastructure",
   "category_name": "Browser infrastructure",
   "tested_at": "2026-10-05",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "Anchor Browser lets an agent in with no account at all: a short text puzzle over HTTP returns an API key, and from there sessions, CDP control, natural-language tasks, saved tasks, managed logins, profiles, files, webhooks and batches all worked headless on the free tier (9 of 10 core capabilities verified). The stops are buying more credits (dashboard only, no payment rail or billing API) and deleting the self-made project; the MCP server is still on the 25 Nov 2025 spec.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     },
     {
      "standard": "A2A",
      "state": "behind",
      "behind": 1,
      "value": "0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: key by API"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 90% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete what it made",
     "at": "delete",
     "how": "no-account",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: key by API",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 90% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete what it made",
     "at": "delete",
     "how": "no-account",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "key_by_api",
     "label": "Key by API",
     "routes": [],
     "minutes": 0.7,
     "core": "9/10"
    }
   ],
   "minutes": 0.7,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "9/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "No way for an agent to pay",
   "coverage_core": 90,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/anchorbrowser?via=api",
   "json": "https://agentdrives.com/api/tools/anchorbrowser.json?via=api"
  },
  {
   "slug": "plane",
   "name": "Plane",
   "domain": "plane.so",
   "icon": "/logos/plane.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-15",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "Plane is highly agent-operable once a key exists: every core task except AI agents ran end to end over the documented REST API (and the official MCP server), three times each, with clean read-back. Getting in still takes the browser: sign-up is an emailed code and API keys are minted only in the web UI. Paying goes through Stripe's hosted portal, blocked to our agent by robots.txt there, and the account cannot be deleted: only deactivated, which a later code login undoes (workspace data was removed, but the account and its login remain).",
   "parts": {
    "holds_up": 74,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     },
     {
      "standard": "A2A",
      "state": "behind",
      "behind": 1,
      "value": "0.3.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: MCP sign-in, sign-up in a browser",
     "way": "email_code"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 90% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Not tried yet",
     "value": "not_tried",
     "route": "portal"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Cancels on its own; deletes its data, but the login stays",
     "at": "delete",
     "left": "data_only"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: MCP sign-in, sign-up in a browser",
     "way": "email_code",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 90% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Not tried yet",
     "value": "not_tried",
     "route": "portal",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Cancels on its own; deletes its data, but the login stays",
     "at": "delete",
     "left": "data_only",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "mcp_signin",
     "label": "MCP sign-in",
     "routes": [
      "oauth_consent"
     ],
     "minutes": 4,
     "core": "0/10"
    },
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [
      "email_code"
     ],
     "minutes": 9,
     "core": "9/10"
    }
   ],
   "minutes": 4,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "9/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-15",
    "held": false
   },
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "API keys and payment only reachable in the web UI",
   "coverage_core": 90,
   "mcp": "official",
   "ways_in": [
    "email_code",
    "oauth_consent"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/plane?via=api",
   "json": "https://agentdrives.com/api/tools/plane.json?via=api"
  },
  {
   "slug": "github",
   "name": "GitHub",
   "domain": "github.com",
   "icon": "/logos/github.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-13",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent cannot open a GitHub account: the sign-up page answers our signed agent with a DataDome block. On an existing account, the device-flow login (one browser approval) gives a token, and REST, GraphQL, gh and the official MCP server (the 28 Jul 2026 spec) run the core work: repos, commits, PRs, reviews, issues, Actions, Projects, three times each. Codespaces refuse our datacenter network; the Copilot cloud agent needs a paid plan.",
   "parts": {
    "holds_up": 59,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: no key needed, sign-up in a browser",
     "way": "device_login"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 89% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Not tried yet: robots.txt keeps our agent off the payment page for now",
     "value": "not_tried",
     "route": "portal",
     "why": "robots"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, made nothing to delete",
     "how": "no-account",
     "left": "nothing_made"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: no key needed, sign-up in a browser",
     "way": "device_login",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 89% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Not tried yet: robots.txt keeps our agent off the payment page for now",
     "value": "not_tried",
     "route": "portal",
     "why": "robots",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, made nothing to delete",
     "how": "no-account",
     "left": "nothing_made",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "keyless",
     "label": "No key needed",
     "routes": [
      "keyless"
     ],
     "minutes": 0.2,
     "core": "0/9"
    },
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [
      "device_login"
     ],
     "minutes": 12,
     "core": "8/9"
    }
   ],
   "minutes": 0.2,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "8/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "DataDome blocks the sign-up page",
   "coverage_core": 89,
   "mcp": "official",
   "ways_in": [
    "device_login"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/github?via=api",
   "json": "https://agentdrives.com/api/tools/github.json?via=api"
  },
  {
   "slug": "shortcut",
   "name": "Shortcut",
   "domain": "shortcut.com",
   "icon": "/logos/shortcut.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "Once the agent had signed up and created an API token in its browser, Shortcut is very agent-friendly: an accurate v4 OpenAPI, clear JSON errors and an official MCP server with dynamic OAuth registration let us create, move, link and clean up stories, epics, iterations, objectives and docs headless. Sign-up, token creation, turning on Docs and roadmap placement need the browser, buying has no agent route, and deleting the account failed silently in the UI.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 88% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 88% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 9.7,
     "core": "7/8"
    }
   ],
   "minutes": 9.7,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "7/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "reCAPTCHA (script on www.shortcut.com/signup)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Account deletion fails silently for sole owners",
   "coverage_core": 88,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/shortcut?via=api",
   "json": "https://agentdrives.com/api/tools/shortcut.json?via=api"
  },
  {
   "slug": "buttondown",
   "name": "Buttondown",
   "domain": "buttondown.com",
   "icon": "/logos/buttondown.png",
   "category": "email-marketing",
   "category_name": "Email marketing",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Buttondown is very agent-friendly once the key is in hand: a complete OpenAPI, clear errors that name the fix, and on the free plan we drafted, scheduled, sent, personalised, archived, exported, imported and bulk-edited through the API, all verified by reading back. Sign-up, the first API key and account deletion need the dashboard (no CAPTCHA, so a browser agent manages), and automations, RSS and tags are behind a card-only paid plan with no billing API.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 85,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 83% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an OpenAPI",
     "have": [
      "llms_txt",
      "openapi"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 83% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 3.3,
     "core": "5/6"
    }
   ],
   "minutes": 3.3,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "5/6",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Sign-up and billing require the dashboard",
   "coverage_core": 83,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/buttondown?via=api",
   "json": "https://agentdrives.com/api/tools/buttondown.json?via=api"
  },
  {
   "slug": "fillout",
   "name": "Fillout",
   "domain": "fillout.com",
   "icon": "/logos/fillout.png",
   "category": "forms",
   "category_name": "Forms",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent can sign up and get a key in a browser, then handle submissions headless (create, list, search, delete, webhooks) through a small, accurate REST API. The Zite MCP connects through OAuth DCR but has no form tools, so building forms (fields, logic, calculations, publish, workflows) takes the web builder, where Fillout's own Form Agent made those edits from a single prompt. Payments and scheduling need Stripe or a Google/Outlook calendar, which we did not have. Upgrading uses an embedded Stripe card form.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 83% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 83% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 5.7,
     "core": "10/12"
    }
   ],
   "minutes": 5.7,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "10/12",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "reCAPTCHA (invisible, v3-style)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "No API or MCP tool to create or edit forms, so the core builder works only in a browser",
   "coverage_core": 83,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/fillout?via=api",
   "json": "https://agentdrives.com/api/tools/fillout.json?via=api"
  },
  {
   "slug": "twenty",
   "name": "Twenty",
   "domain": "twenty.com",
   "icon": "/logos/twenty.png",
   "category": "crm",
   "category_name": "CRM",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 4,
   "level_name": "Runs on its own",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Once a workspace exists, Twenty is one of the most agent-ready CRMs: its official MCP server (324 tools) and REST/GraphQL let an agent run records, custom objects, views, workflows, AI-agent steps and dashboards end to end. Sign-up, onboarding and the first API key need a browser, but invisible reCAPTCHA let our agent through and a 7-day trial needs no card. Paying is web-only, and the card step did not open for our agent's browser.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 80% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: cancels on its own, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 80% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: cancels on its own, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 10.3,
     "core": "8/10"
    }
   ],
   "minutes": 10.3,
   "next": {
    "to": 5,
    "text": "Next: pay without a person"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "8/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "reCAPTCHA (invisible)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Purchase: card form never opened",
   "coverage_core": 80,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/twenty?via=api",
   "json": "https://agentdrives.com/api/tools/twenty.json?via=api"
  },
  {
   "slug": "signwell",
   "name": "SignWell",
   "domain": "signwell.com",
   "icon": "/logos/signwell.png",
   "category": "e-signature",
   "category_name": "E-signature",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "SignWell's documented REST API, official CLI and stdio MCP server let an agent do the whole core flow: draft, fields, signing order, send, track, signed PDF, templates and webhooks, free in test mode. Sign-up and email verification worked headless, but the API key is only in the web settings behind a mandatory onboarding wizard, and leaving (cancel plus delete) is a web-only flow with a retention offer. There is no agent payment rail, only an in-app Stripe card form.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.1"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "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 card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "part",
     "text": "Deletes; cancels only through a retention flow or support",
     "at": "cancel",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "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 card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "part",
     "text": "Deletes; cancels only through a retention flow or support",
     "at": "cancel",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 7.2,
     "core": "8/8"
    }
   ],
   "minutes": 7.2,
   "next": {
    "to": 4,
    "text": "Next: cancel the plan on its own"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "8/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "First-party honeypot fields on the sign-up form (field1, status)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "API key only in web settings, after onboarding",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/signwell?via=api",
   "json": "https://agentdrives.com/api/tools/signwell.json?via=api"
  },
  {
   "slug": "craft",
   "name": "Craft",
   "domain": "craft.do",
   "icon": "/logos/craft.png",
   "category": "workspace",
   "category_name": "Docs and workspace",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Craft has a rich documented space API (44 operations) and an official OAuth MCP server. The agent signed up, made an API link and approved MCP itself in its browser, then drove 7 of 9 core capabilities: documents, folders, tasks, daily notes, collections and whiteboards headless, publishing in the browser. Sign-up, credentials, publish, share, the Assistant and account deletion are web-only; MCP is on the older 25 Nov 2025 spec (DCR only), a task update answers a false 404, and cross-document regex ignores capital letters.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.1"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 78% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 78% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 6.3,
     "core": "7/9"
    }
   ],
   "minutes": 6.3,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 78%)"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "7/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "reCAPTCHA (invisible)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "API/MCP credentials need the web app",
   "coverage_core": 78,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/craft?via=api",
   "json": "https://agentdrives.com/api/tools/craft.json?via=api"
  },
  {
   "slug": "plausible",
   "name": "Plausible Analytics",
   "domain": "plausible.io",
   "icon": "/logos/plausible.png",
   "category": "web-analytics",
   "category_name": "Web analytics",
   "tested_at": "2026-10-11",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent can open a 30-day trial (no card) in a browser and then read its stats headless over the Stats API. Setup is web-only on the trial: sites, goals, funnels, shared links, API keys and account delete. The write API (Sites API) is Enterprise only. The Events API silently drops events from our agent (202 with `x-plausible-dropped: 1`). Core coverage: 5 of 8 core capabilities done and verified (, 03, 04, 05 and 07). was partial, failed, and (funnel analysis) is also partial: the funnel's CRUD steps (create/rename/delete) were done, but the dashboard funnel report itself, the capability's defining check, timed out when opened and was never verified.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 30,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 75% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "no",
     "text": "No llms.txt, OpenAPI or MCP server",
     "have": []
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 75% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 5,
     "core": "6/8"
    }
   ],
   "minutes": 5,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 75%)"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "6/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "Friendly Captcha",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 4,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Write API is Enterprise only; setup is web-only",
   "coverage_core": 75,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/plausible?via=api",
   "json": "https://agentdrives.com/api/tools/plausible.json?via=api"
  },
  {
   "slug": "umami",
   "name": "Umami",
   "domain": "umami.is",
   "icon": "/logos/umami.png",
   "category": "web-analytics",
   "category_name": "Web analytics",
   "tested_at": "2026-10-08",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent can sign up for Umami Cloud's free plan without a bot check and use the whole dashboard in a browser: websites, goals, funnels, notes, links, pixels, shares, export and account delete. The API and MCP server need a Pro key, and hits our self-identified agent sent to /api/send were dropped as bot traffic, so every report it read was empty.",
   "parts": {
    "holds_up": 64,
    "docs_match": null,
    "setup": 75,
    "security": "private",
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own, in a browser (the API key is paid)",
     "at": "credentials",
     "how": "in-browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 75% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Not tried yet: robots.txt keeps our agent off the payment page for now",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "robots"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own, in a browser (the API key is paid)",
     "at": "credentials",
     "how": "in-browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 75% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Not tried yet: robots.txt keeps our agent off the payment page for now",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "robots",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": null,
     "core": "6/8"
    }
   ],
   "minutes": null,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 75%)"
   },
   "stop": "credentials",
   "coverage_source": "computed",
   "core": "6/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "API keys and MCP need Pro plan",
   "coverage_core": 75,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/umami?via=api",
   "json": "https://agentdrives.com/api/tools/umami.json?via=api"
  },
  {
   "slug": "pipedrive",
   "name": "Pipedrive",
   "domain": "pipedrive.com",
   "icon": "/logos/pipedrive.png",
   "category": "crm",
   "category_name": "CRM",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "Pipedrive is very drivable once an agent is in: through the free developer sandbox (one browser form, no CAPTCHA) and an API token, we created, moved, converted, searched, filtered and deleted CRM data end to end via REST v1/v2 and the official OAuth-protected MCP server. The regular trial sign-up was refused with a generic error (400; an invisible reCAPTCHA is on the page), email sending, automations, reports and billing have no API, and there is no agent payment rail or account deletion.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 71% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 71% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 5.3,
     "core": "5/7"
    }
   ],
   "minutes": 5.3,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 71%)"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "5/7",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Trial sign-up refused with a generic error",
   "coverage_core": 71,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/pipedrive?via=api",
   "json": "https://agentdrives.com/api/tools/pipedrive.json?via=api"
  },
  {
   "slug": "coda",
   "name": "Coda",
   "domain": "coda.io",
   "icon": "/logos/coda.png",
   "category": "workspace",
   "category_name": "Docs and workspace",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "The agent signed up, verified its email and made an API token itself in a browser; from there it ran Coda (now Superhuman Docs) through the REST API and the official MCP server: a doc, pages, a typed table with formula and button columns, rows, sharing and a Pack, all read back. 7 of the 10 core capabilities are done and verified; AI columns, automations and the AI assistant building tables were not tested. The gaps are the browser-only sign-up and token, an MCP server on the older 25 Nov 2025 spec that redirects doc calls with an empty 307, publishing that needs a maker profile made in the web app, a card-only checkout, and account deletion: the re-auth page on grammarly.com showed no form in our agent's browser (one try).",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 80,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 70% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an OpenAPI and an MCP server",
     "have": [
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 70% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 5.3,
     "core": "8/10"
    }
   ],
   "minutes": 5.3,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 70%)"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "7/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Account deletion stuck behind invisible reCAPTCHA re-auth",
   "coverage_core": 70,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/coda?via=api",
   "json": "https://agentdrives.com/api/tools/coda.json?via=api"
  },
  {
   "slug": "convex",
   "name": "Convex",
   "domain": "convex.dev",
   "icon": "/logos/convex.png",
   "category": "databases",
   "category_name": "Databases",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": 4,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Convex is one of the most agent-ready backends to build on. It has llms.txt and markdown docs, an OpenAPI Management API, an Agent Mode guide, and a CLI that starts a local backend with no account; on that backend every core backend task worked on the first try, and so did file storage, text and vector search, custom-JWT auth and live subscriptions. The hosted cloud is closed to agents at the first door: auth.convex.dev/sign-up shows a visible Cloudflare 'Verify you are human' challenge, so the drive got no cloud project, no deploy key, no MCP session and no purchase. The open-source self-hosted backend installed with Docker in under a minute and the CLI could drive it fully.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in without an account (runs locally); can't sign up for one",
     "at": "signup",
     "how": "no-account"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 70% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, made nothing to delete",
     "how": "no-account",
     "left": "nothing_made"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in without an account (runs locally); can't sign up for one",
     "at": "signup",
     "how": "no-account",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 70% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, made nothing to delete",
     "how": "no-account",
     "left": "nothing_made",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "local",
     "label": "Runs locally",
     "routes": [
      "local"
     ],
     "minutes": null,
     "core": null
    }
   ],
   "minutes": null,
   "next": {
    "to": 4,
    "text": "Next: let an agent sign up for an account on its own (without one it does 70% of the core work)"
   },
   "stop": "signup",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare human check on the sign-up page",
   "coverage_core": 70,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/convex?via=api",
   "json": "https://agentdrives.com/api/tools/convex.json?via=api"
  },
  {
   "slug": "stripe",
   "name": "Stripe",
   "domain": "stripe.com",
   "icon": "/logos/stripe.png",
   "category": "payments",
   "category_name": "Payments",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent gets working Stripe test keys with one CLI command and no account, then drives payments, Checkout, Elements, subscriptions, invoices, coupons, refunds, webhooks and the official MCP server headless (6 of 9 core capabilities). The unclaimed-sandbox key is restricted, and turning it into a full account means a sign-up form that showed a visible hCaptcha puzzle, so metering, Connect, Terminal and every Dashboard feature stayed out of reach. Agent-native payment rails (x402 v2 and MPP) exist, but only on Stripe's Climate side endpoint.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "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.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: key by API"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 67% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: an agent payment on its API, none made yet",
     "value": "ready",
     "route": "agent_rail"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, what it made goes after 7 days",
     "how": "no-account",
     "left": "expires",
     "after_hours": 168
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: key by API",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 67% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: an agent payment on its API, none made yet",
     "value": "ready",
     "route": "agent_rail",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, what it made goes after 7 days",
     "how": "no-account",
     "left": "expires",
     "after_hours": 168,
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "key_by_api",
     "label": "Key by API",
     "routes": [],
     "minutes": 1.9,
     "core": "6/9"
    }
   ],
   "minutes": 1.9,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 67%)"
   },
   "stop": "pay",
   "coverage_source": "computed",
   "core": "6/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P3",
   "pays_with": [
    "x402",
    "mpp"
   ],
   "paid": false,
   "first_blocker": "hCaptcha puzzle when claiming the sandbox",
   "coverage_core": 67,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/stripe?via=api",
   "json": "https://agentdrives.com/api/tools/stripe.json?via=api"
  },
  {
   "slug": "monday",
   "name": "monday.com",
   "domain": "monday.com",
   "icon": "/logos/monday.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "monday.com is unusually agent-ready once an agent is inside: llms.txt, agent skills, and a hosted MCP with 98 tools that accepts the API token directly. Through it we built boards, items, workflows, dashboards, forms, docs, agents and Vibe apps, and verified each by reading it back. Getting in was harder than advertised: the agent sign-up API was down (503) and the plain sign-up showed a visible reCAPTCHA, but the agent browser sign-up worked without a challenge. Sidekick, Kanban/timeline views, automation creation on trial with a personal token, paying and account deletion are not reachable headless.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 67% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 67% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 7,
     "core": "7/9"
    }
   ],
   "minutes": 7,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 67%)"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "6/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "reCAPTCHA (invisible)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 3,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Delete not found on this drive (an earlier drive requested it in the web UI)",
   "coverage_core": 67,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/monday?via=api",
   "json": "https://agentdrives.com/api/tools/monday.json?via=api"
  },
  {
   "slug": "mattermost",
   "name": "Mattermost",
   "domain": "mattermost.com",
   "icon": "/logos/mattermost.png",
   "category": "team-chat",
   "category_name": "Team chat",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "An agent can sign up for a 30-day Mattermost Cloud Enterprise trial without a card, but only in the browser. After that the documented REST API v4 does almost all of the chat product headless: channels, posts, threads, files, search, webhooks, guests, groups and plugins. The AI Agents and MCP need an LLM key, calls are browser media, buying goes through sales, and no way to delete the workspace was found.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 80,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 62% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "no",
     "text": "A person has to buy: a sales call",
     "value": "person",
     "route": "sales",
     "why": "sales"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an OpenAPI and an MCP server",
     "have": [
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 62% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "no",
     "text": "A person has to buy: a sales call",
     "value": "person",
     "route": "sales",
     "why": "sales",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 7.8,
     "core": "5/8"
    }
   ],
   "minutes": 7.8,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 62%)"
   },
   "stop": "pay",
   "coverage_source": "computed",
   "core": "5/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P0",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Workspace sign-up browser-only; buying via sales, no delete found",
   "coverage_core": 62,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/mattermost?via=api",
   "json": "https://agentdrives.com/api/tools/mattermost.json?via=api"
  },
  {
   "slug": "railway",
   "name": "Railway",
   "domain": "railway.com",
   "icon": "/logos/railway.png",
   "category": "hosting",
   "category_name": "Hosting and deploys",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Railway is unusually agent-ready on paper (llms.txt, markdown docs, auth.md, API catalog, PRM, CIMD, device flow, official MCP), and an agent can get a free VM and a project token with no account via `ssh railway.new`, then add databases, set variables, open TCP proxies, read logs and metrics, and run sandboxes. But account sign-up sits behind a visible Cloudflare Turnstile, and the anonymous token cannot deploy code, so deploying an app, MCP and paying all need a human.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: try first, claim later",
     "how": "no-account"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 60% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, what it made goes after 24 hours",
     "how": "no-account",
     "left": "expires",
     "after_hours": 24
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: try first, claim later",
     "how": "no-account",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 60% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, what it made goes after 24 hours",
     "how": "no-account",
     "left": "expires",
     "after_hours": 24,
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "try_first",
     "label": "Try first, claim later",
     "routes": [
      "claimable"
     ],
     "minutes": 11.6,
     "core": "6/10"
    }
   ],
   "minutes": 11.6,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 60%)"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "6/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the email sign-up",
   "coverage_core": 60,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/railway?via=api",
   "json": "https://agentdrives.com/api/tools/railway.json?via=api"
  },
  {
   "slug": "tidycal",
   "name": "TidyCal",
   "domain": "tidycal.com",
   "icon": "/logos/tidycal.png",
   "category": "scheduling",
   "category_name": "Scheduling",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "On TidyCal's free plan an agent can do the core scheduling in a browser: create a booking type, publish it, and book, reschedule and cancel an appointment. The REST API and the read-only MCP server need a paid plan, so nothing works headless after the docs. Sign-up is a reCAPTCHA web form that let our agent's browser through, and Pro is sold only through a hosted Stripe card checkout.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own, in a browser (the API key is paid)",
     "at": "credentials",
     "how": "in-browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 60% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own, in a browser (the API key is paid)",
     "at": "credentials",
     "how": "in-browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 60% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": null,
     "core": "6/10"
    }
   ],
   "minutes": null,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 60%)"
   },
   "stop": "credentials",
   "coverage_source": "computed",
   "core": "6/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "Google reCAPTCHA (invisible)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 3,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "API and MCP need a paid plan",
   "coverage_core": 60,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/tidycal?via=api",
   "json": "https://agentdrives.com/api/tools/tidycal.json?via=api"
  },
  {
   "slug": "ticktick",
   "name": "TickTick",
   "domain": "ticktick.com",
   "icon": null,
   "category": "task-management",
   "category_name": "Task management",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "With a personal API key, an agent can drive TickTick's tasks, lists, tags, reminders, repeats, comments, Kanban, focus records and habit check-ins through the documented REST API or the official 28 Jul 2026 MCP server. Sign-up, key creation and account deletion need the web app; countdowns cannot be created and API-made habits did not show in the app. Premium is a card-only Stripe Checkout.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 45,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 57% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an MCP server",
     "have": [
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 57% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 7.3,
     "core": "4/7"
    }
   ],
   "minutes": 7.3,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 57%)"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "4/7",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "API key only created in web app",
   "coverage_core": 57,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/ticktick?via=api",
   "json": "https://agentdrives.com/api/tools/ticktick.json?via=api"
  },
  {
   "slug": "penpot",
   "name": "Penpot",
   "domain": "penpot.app",
   "icon": "/logos/penpot.png",
   "category": "design",
   "category_name": "Design",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent can get through Penpot's whole access ladder headless with the documented RPC API: sign up, verify, token, first design, delete account. It can drive most design work through low-level update-file changes, comments, teams, libraries, templates and .penpot export/import. The official MCP server works but needs a live browser tab running the Penpot plugin; prototype interactions need Transit encoding, and token changes do not reach the shapes.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up by email"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 57% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up by email",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 57% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "email_signup",
     "label": "Sign-up by email",
     "routes": [],
     "minutes": 16.2,
     "core": "4/7"
    }
   ],
   "minutes": 16.2,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 57%)"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "4/7",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "AI design tools need an open browser tab",
   "coverage_core": 57,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/penpot?via=api",
   "json": "https://agentdrives.com/api/tools/penpot.json?via=api"
  },
  {
   "slug": "tavily",
   "name": "Tavily",
   "domain": "tavily.com",
   "icon": "/logos/tavily.png",
   "category": "search-apis",
   "category_name": "Search APIs",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Tavily is easy for an agent to start with: keyless Search and Extract work on REST, a modern 28 Jul 2026 MCP server and the CLI with no account, and covered 4 of 8 core tasks. Getting further fails: email sign-up shows a Cloudflare Turnstile checkbox and GitHub/OAuth sign-in is refused by Auth0 as a 'Suspicious User Agent', so Crawl, Map and Research (free with a key) were out of reach. The first-party x402 rail sells only search, and our signed payments came back settlement_failed.",
   "parts": {
    "holds_up": 90,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     },
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.3"
     },
     {
      "standard": "A2A",
      "state": "current",
      "behind": null,
      "value": "1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in without an account (no key needed); can't sign up for one",
     "at": "signup",
     "how": "no-account",
     "way": "keyless"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 50% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Tried to pay: the payment failed on the seller's side",
     "value": "ready",
     "route": "agent_rail",
     "why": "unsettled"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, made nothing to delete",
     "how": "no-account",
     "left": "nothing_made"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in without an account (no key needed); can't sign up for one",
     "at": "signup",
     "how": "no-account",
     "way": "keyless",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 50% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Tried to pay: the payment failed on the seller's side",
     "value": "ready",
     "route": "agent_rail",
     "why": "unsettled",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, made nothing to delete",
     "how": "no-account",
     "left": "nothing_made",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "keyless",
     "label": "No key needed",
     "routes": [
      "keyless"
     ],
     "minutes": 1,
     "core": "4/8"
    }
   ],
   "minutes": 1,
   "next": {
    "to": 4,
    "text": "Next: let an agent sign up for an account on its own (without one it does 50% of the core work)"
   },
   "stop": "signup",
   "coverage_source": "computed",
   "core": "4/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-16",
    "held": false
   },
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P3",
   "pays_with": [
    "x402"
   ],
   "paid": false,
   "first_blocker": "Auth0 refuses agent user agent; Turnstile on email",
   "coverage_core": 50,
   "mcp": "official",
   "ways_in": [
    "keyless"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/tavily?via=api",
   "json": "https://agentdrives.com/api/tools/tavily.json?via=api"
  },
  {
   "slug": "mixpanel",
   "name": "Mixpanel",
   "domain": "mixpanel.com",
   "icon": "/logos/mixpanel.png",
   "category": "product-analytics",
   "category_name": "Product analytics",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "An agent can sign up for Mixpanel's free plan in a browser without a CAPTCHA, but the first credential (a service account) exists only in the web UI. With it, ingestion, raw export, feature flags with targeting, experiments, Lexicon and boards (via the official 66-tool MCP server) all work headless. Every analysis query (Insights, funnels, retention, MCP Run-Query) returns HTTP 402 on the free plan, upgrading needs a card in a Stripe form, and deleting the organization is a web button with a 90-day delay.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.2"
     },
     {
      "standard": "A2A",
      "state": "behind",
      "behind": 1,
      "value": "0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 50% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 50% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 9.5,
     "core": "2/4"
    }
   ],
   "minutes": 9.5,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 50%)"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "2/4",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Query API blocked on the free plan",
   "coverage_core": 50,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/mixpanel?via=api",
   "json": "https://agentdrives.com/api/tools/mixpanel.json?via=api"
  },
  {
   "slug": "browse",
   "name": "Browse AI",
   "domain": "browse.ai",
   "icon": "/logos/browse.png",
   "category": "web-scraping",
   "category_name": "Web scraping",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 3,
   "level_name": "Does the work",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Browse AI has a clean, documented REST API for running robots, monitors, bulk runs and webhooks; an agent drives all of that headless once a robot exists. Sign-up, API keys and robot training are web UI only (no CAPTCHA met); the agent did them in its own browser. 4 of 8 core capabilities done and verified; pagination failed, screenshots and change alerts were not tried.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 50% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an OpenAPI",
     "have": [
      "llms_txt",
      "openapi"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 50% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 12.7,
     "core": "5/8"
    }
   ],
   "minutes": 12.7,
   "next": {
    "to": 4,
    "text": "Next: do 80% of the core work (now 50%)"
   },
   "stop": "pay",
   "coverage_source": "computed",
   "core": "4/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Robots can only be created in the web UI",
   "coverage_core": 50,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/browse?via=api",
   "json": "https://agentdrives.com/api/tools/browse.json?via=api"
  },
  {
   "slug": "neon",
   "name": "Neon",
   "domain": "neon.com",
   "icon": "/logos/neon.png",
   "category": "databases",
   "category_name": "Databases",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "Neon is unusually agent-friendly without an account: auth.md and `neon claim create` gave a working Postgres database, Managed Better Auth and a Data API in seconds, and we drove SQL, extensions, autoscaling, scale-to-zero, auth sign-ups, RLS-protected REST CRUD and neon.ts deploys headless. The real account is out of reach (a Cloudflare interstitial on console sign-up), and claimable projects block branching, restore, roles, functions, storage and most of the Management API until a human claims them, so 5 of 11 non-gated core capabilities were verified.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: try first, claim later",
     "how": "no-account"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 45% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, what it made goes after 3 days",
     "how": "no-account",
     "left": "expires",
     "after_hours": 72
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: try first, claim later",
     "how": "no-account",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 45% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, what it made goes after 3 days",
     "how": "no-account",
     "left": "expires",
     "after_hours": 72,
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "try_first",
     "label": "Try first, claim later",
     "routes": [
      "claimable"
     ],
     "minutes": 3.3,
     "core": "5/11"
    }
   ],
   "minutes": 3.3,
   "next": {
    "to": 3,
    "text": "Next: do half of the core work (now 45%)"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "5/11",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare interstitial on the console sign-up page",
   "coverage_core": 45,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/neon?via=api",
   "json": "https://agentdrives.com/api/tools/neon.json?via=api"
  },
  {
   "slug": "brevo",
   "name": "Brevo",
   "domain": "brevo.com",
   "icon": "/logos/brevo.png",
   "category": "email-marketing",
   "category_name": "Email marketing",
   "tested_at": "2026-10-03",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "An agent can sign up for Brevo's free plan in a browser, verify by email headless, and get an MCP or REST token through OAuth with one browser consent, then manage contacts, lists, CRM deals and records, templates, webhooks and eCommerce data over a 282-tool MCP server and a 286-operation REST API. It cannot send: new accounts need Brevo's manual activation and an authenticated sender domain, and the web app stays behind an organization-address step, so API keys, the editor and account deletion are out of reach.",
   "parts": {
    "holds_up": 78,
    "docs_match": 89,
    "setup": 100,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 38% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 38% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 5.9,
     "core": "3/8"
    }
   ],
   "minutes": 5.9,
   "next": {
    "to": 3,
    "text": "Next: do half of the core work (now 38%)"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "3/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "Google reCAPTCHA (invisible)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 4,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Sending needs Brevo's manual account activation",
   "coverage_core": 38,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/brevo?via=api",
   "json": "https://agentdrives.com/api/tools/brevo.json?via=api"
  },
  {
   "slug": "shopify",
   "name": "Shopify",
   "domain": "shopify.com",
   "icon": "/logos/shopify.png",
   "category": "ecommerce",
   "category_name": "E-commerce",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "Without any account, an agent can create a temporary Shopify store from the CLI and run the Admin GraphQL API on it: products, variants, inventory, theme files, pages, metaobjects, bundles, shipping rates and discounts all worked and read back. A real account is behind a Cloudflare 'Verify you are human' challenge, so orders, customers, payments, plans and keeping the store need a human. The official Setup MCP only accepts OAuth from ChatGPT, Claude and Perplexity.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: key by API"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 33% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete what it made",
     "at": "delete",
     "how": "no-account",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: key by API",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 33% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete what it made",
     "at": "delete",
     "how": "no-account",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "key_by_api",
     "label": "Key by API",
     "routes": [],
     "minutes": 5.7,
     "core": "3/9"
    }
   ],
   "minutes": 5.7,
   "next": {
    "to": 3,
    "text": "Next: do half of the core work (now 33%)"
   },
   "stop": "delete",
   "coverage_source": "computed",
   "core": "3/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare challenge on Shopify account sign-up",
   "coverage_core": 33,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/shopify?via=api",
   "json": "https://agentdrives.com/api/tools/shopify.json?via=api"
  },
  {
   "slug": "fly",
   "name": "Fly.io",
   "domain": "fly.io",
   "icon": "/logos/fly.png",
   "category": "hosting",
   "category_name": "Hosting and deploys",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "On Fly.io an agent can drive Sprites end to end over the documented REST API and the official Sprites MCP: create, exec, checkpoint/restore and a public URL. The Machines side stopped right after sign-up: Fly's risk check flagged the new account and every app, Machine and Postgres action asked for a card, although the docs promise a no-card trial. Sign-up, verification and credentials need a browser; the agent-facing docs (llms.txt, Markdown, OpenAPI 3.1, auth.md) are excellent.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 30% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 30% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 4.8,
     "core": "3/10"
    }
   ],
   "minutes": 4.8,
   "next": {
    "to": 3,
    "text": "Next: do half of the core work (now 30%)"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "3/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Risk flag demands card preauth for Machines",
   "coverage_core": 30,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/fly?via=api",
   "json": "https://agentdrives.com/api/tools/fly.json?via=api"
  },
  {
   "slug": "zapier",
   "name": "Zapier",
   "domain": "zapier.com",
   "icon": "/logos/zapier.png",
   "category": "automation",
   "category_name": "Automation",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent can sign up and authorise Zapier in a browser (no CAPTCHA, no email confirmation needed) and then work headless through the SDK CLI and the official MCP server: we created, updated and read back records in Zapier Tables, ran a Tables action through MCP, and saved and used an MCP Skill. Zaps, the core product, have no headless route for a normal account, and in our agent's browser the editor's Copilot left the draft Zap unfinished. Account deletion is web only.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 25% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 25% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 7.7,
     "core": "2/8"
    }
   ],
   "minutes": 7.7,
   "next": {
    "to": 3,
    "text": "Next: do half of the core work (now 25%)"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "2/8",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Zaps have no headless create/publish route",
   "coverage_core": 25,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/zapier?via=api",
   "json": "https://agentdrives.com/api/tools/zapier.json?via=api"
  },
  {
   "slug": "exa",
   "name": "Exa",
   "domain": "exa.ai",
   "icon": "/logos/exa.png",
   "category": "search-apis",
   "category_name": "Search APIs",
   "tested_at": "2026-10-15",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-buy",
    "agent-can-leave"
   ],
   "summary": "An agent can use Exa without an account: the hosted MCP server searches and reads pages with no key, and /search and /contents take x402 or MPP payments per call. Getting an account is where it stops: the sign-up form shows a Cloudflare Turnstile and the dashboard blocks our agent's browser with a Vercel checkpoint, so answer, agent runs, websets and monitors stayed out of reach.",
   "parts": {
    "holds_up": 60,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     },
     {
      "standard": "A2A",
      "state": "behind",
      "behind": 1,
      "value": "0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: no key needed, pay per call",
     "how": "no-account",
     "way": "keyless"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 20% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Pays per call for part of it: paid $0.001 a call (x402), 15 Oct",
     "value": "partial",
     "route": "agent_rail",
     "per_call": {
      "caps": [
       "cap-01",
       "cap-02",
       "cap-03"
      ],
      "core": 10,
      "share": 30
     }
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, made nothing to delete",
     "how": "no-account",
     "left": "nothing_made"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: no key needed, pay per call",
     "how": "no-account",
     "way": "keyless",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 20% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Pays per call for part of it: paid $0.001 a call (x402), 15 Oct",
     "value": "partial",
     "route": "agent_rail",
     "per_call": {
      "caps": [
       "cap-01",
       "cap-02",
       "cap-03"
      ],
      "core": 10,
      "share": 30
     },
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, made nothing to delete",
     "how": "no-account",
     "left": "nothing_made",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "keyless",
     "label": "No key needed",
     "routes": [
      "keyless"
     ],
     "minutes": 2,
     "core": "2/10"
    },
    {
     "key": "pay_per_call",
     "label": "Pay per call",
     "routes": [
      "pay_per_call"
     ],
     "minutes": 0.5,
     "core": "3/10"
    }
   ],
   "minutes": 0.5,
   "next": {
    "to": 3,
    "text": "Next: do half of the core work (now 20%)"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "2/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 6,
   "pay": "P4",
   "pays_with": [
    "stripe-projects",
    "x402",
    "mpp"
   ],
   "paid": true,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": 20,
   "mcp": "official",
   "ways_in": [
    "keyless",
    "pay_per_call"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/exa?via=api",
   "json": "https://agentdrives.com/api/tools/exa.json?via=api"
  },
  {
   "slug": "browserbase",
   "name": "Browserbase",
   "domain": "browserbase.com",
   "icon": "/logos/browserbase.png",
   "category": "browser-infrastructure",
   "category_name": "Browser infrastructure",
   "tested_at": "2026-10-13",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-buy",
    "agent-can-leave"
   ],
   "summary": "Browserbase sells browser sessions, search and fetch to agents with no account over x402 (v1) and MPP on its own domain; we paid one $0.01 session and the agent read it back and ended it. Everything else (API key, agents, functions, contexts) needs an account, and the sign-up form requires a phone number, so an agent stops there.",
   "parts": {
    "holds_up": 96,
    "docs_match": null,
    "setup": 100,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     },
     {
      "standard": "A2A",
      "state": "behind",
      "behind": 1,
      "value": "0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: pay per call",
     "how": "no-account",
     "way": "pay_per_call"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 20% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Pays per call for part of it: paid $0.01 a call (x402), 13 Oct",
     "value": "partial",
     "route": "agent_rail",
     "per_call": {
      "caps": [
       "cap-01"
      ],
      "core": 10,
      "share": 10
     }
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes what it made",
     "how": "no-account",
     "left": "removed"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: pay per call",
     "how": "no-account",
     "way": "pay_per_call",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 20% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Pays per call for part of it: paid $0.01 a call (x402), 13 Oct",
     "value": "partial",
     "route": "agent_rail",
     "per_call": {
      "caps": [
       "cap-01"
      ],
      "core": 10,
      "share": 10
     },
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes what it made",
     "how": "no-account",
     "left": "removed",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "pay_per_call",
     "label": "Pay per call",
     "routes": [
      "pay_per_call"
     ],
     "minutes": 1,
     "core": "2/10"
    }
   ],
   "minutes": 1,
   "next": {
    "to": 3,
    "text": "Next: do half of the core work (now 20%)"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "2/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 5,
   "pay": "P4",
   "pays_with": [
    "stripe-projects",
    "x402"
   ],
   "paid": true,
   "first_blocker": "Phone number required at sign-up",
   "coverage_core": 20,
   "mcp": "official",
   "ways_in": [
    "pay_per_call"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/browserbase?via=api",
   "json": "https://agentdrives.com/api/tools/browserbase.json?via=api"
  },
  {
   "slug": "gumroad",
   "name": "Gumroad",
   "domain": "gumroad.com",
   "icon": "/logos/gumroad.png",
   "category": "ecommerce",
   "category_name": "E-commerce",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent gets a Gumroad account and a token with a few browser steps (sign-up form, token button), then works fully headless through a ~80-operation REST API, an official CLI and an official MCP server: drafts, variants, discounts, files, upsells, webhooks. It cannot sell anything: publishing any product needs a payout method with identity verification (phone, date of birth, address, ID), and emails, workflows and service products are held back by sales and account-age gates.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 3,
      "value": "2025-03-26"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 10% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "na",
     "text": "No plan to buy",
     "value": "nothing",
     "route": "none"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 10% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "na",
     "text": "No plan to buy",
     "value": "nothing",
     "route": "none",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 4.6,
     "core": "1/10"
    }
   ],
   "minutes": 4.6,
   "next": {
    "to": 3,
    "text": "Next: do half of the core work (now 10%)"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "1/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "n/a",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Publishing needs payout setup with identity data",
   "coverage_core": 10,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/gumroad?via=api",
   "json": "https://agentdrives.com/api/tools/gumroad.json?via=api"
  },
  {
   "slug": "netlify",
   "name": "Netlify",
   "domain": "netlify.com",
   "icon": "/logos/netlify.png",
   "category": "hosting",
   "category_name": "Hosting and deploys",
   "tested_at": "2026-10-11",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent can deploy a static site to Netlify with no account (netlify deploy --allow-anonymous) and use the Image CDN on it, and the docs are agent-ready (llms.txt, Markdown pages, OpenAPI, MCP server card). Opening an account failed: the email sign-up form silently reset after an invisible reCAPTCHA Enterprise check, so no token, MCP, functions or project management were reachable.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 3,
      "value": "2.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in without an account (try first, claim later); can't sign up for one",
     "at": "signup",
     "how": "no-account"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 10% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, what it made goes after 1 hour",
     "how": "no-account",
     "left": "expires",
     "after_hours": 1
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in without an account (try first, claim later); can't sign up for one",
     "at": "signup",
     "how": "no-account",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 10% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, what it made goes after 1 hour",
     "how": "no-account",
     "left": "expires",
     "after_hours": 1,
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "try_first",
     "label": "Try first, claim later",
     "routes": [
      "claimable"
     ],
     "minutes": 5.5,
     "core": "1/10"
    }
   ],
   "minutes": 5.5,
   "next": {
    "to": 3,
    "text": "Next: let an agent sign up for an account on its own (without one it does 10% of the core work)"
   },
   "stop": "signup",
   "coverage_source": "computed",
   "core": "1/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [
    "stripe-projects"
   ],
   "paid": false,
   "first_blocker": "invisible reCAPTCHA silently drops email sign-up",
   "coverage_core": 10,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/netlify?via=api",
   "json": "https://agentdrives.com/api/tools/netlify.json?via=api"
  },
  {
   "slug": "vercel",
   "name": "Vercel",
   "domain": "vercel.com",
   "icon": "/logos/vercel.png",
   "category": "hosting",
   "category_name": "Hosting and deploys",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "Vercel's docs are very agent-ready (llms.txt, Markdown pages, OpenAPI, AI Catalog, official MCP with OAuth and a CLI device login), but an agent cannot get in: the email sign-up was refused with no reason, and the GitHub sign-up created the account and then asked for a phone number for an SMS code on every login. Only keyless reads (AI Gateway model list, domain search) worked; the account it made could not be deleted.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: no key needed",
     "way": "keyless"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 0% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "no",
     "text": "A person has to buy: a phone number at checkout",
     "value": "person",
     "route": "billing_api",
     "why": "phone"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete what it made",
     "at": "delete",
     "how": "no-account",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: no key needed",
     "way": "keyless",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 0% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "no",
     "text": "A person has to buy: a phone number at checkout",
     "value": "person",
     "route": "billing_api",
     "why": "phone",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete what it made",
     "at": "delete",
     "how": "no-account",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "keyless",
     "label": "No key needed",
     "routes": [
      "keyless"
     ],
     "minutes": 2,
     "core": "0/10"
    }
   ],
   "minutes": 2,
   "next": {
    "to": 3,
    "text": "Next: do half of the core work (now 0%)"
   },
   "stop": "pay",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-16",
    "held": false
   },
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P3",
   "pays_with": [
    "stripe-projects"
   ],
   "paid": false,
   "first_blocker": "SMS phone verification on every login",
   "coverage_core": 0,
   "mcp": "official",
   "ways_in": [
    "keyless"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/vercel?via=api",
   "json": "https://agentdrives.com/api/tools/vercel.json?via=api"
  },
  {
   "slug": "planetscale",
   "name": "PlanetScale",
   "domain": "planetscale.com",
   "icon": "/logos/planetscale.png",
   "category": "databases",
   "category_name": "Databases",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent gets into PlanetScale entirely headless: sign-up form without CAPTCHA, email verification, CLI device login, service tokens, REST API and a 25-tool hosted MCP server, all with unusually agent-friendly JSON errors and an agent setup guide. The wall is the first real action: there is no free plan, so creating a database (and with it every core capability) needs a card attached through Stripe Checkout. Account deletion works only in the web UI.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up by email"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Most of the core needs a paid plan, so the work is not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up by email",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "unreached",
     "text": "Most of the core needs a paid plan, so the work is not measured",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "left": "deleted",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "email_signup",
     "label": "Sign-up by email",
     "routes": [],
     "minutes": 2.5,
     "core": null
    }
   ],
   "minutes": 2.5,
   "next": {
    "to": 3,
    "text": "Next: let a trial or free plan reach the core features"
   },
   "stop": "first_action",
   "coverage_source": "computed",
   "core": "0/0",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "hidden honeypot field (telephone)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [
    "stripe-projects"
   ],
   "paid": false,
   "first_blocker": "No free plan: database needs a card",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/planetscale?via=api",
   "json": "https://agentdrives.com/api/tools/planetscale.json?via=api"
  },
  {
   "slug": "postiz",
   "name": "Postiz",
   "domain": "postiz.com",
   "icon": "/logos/postiz.png",
   "category": "social-media-scheduling",
   "category_name": "Social media scheduling",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "Postiz is built for agents on paper (llms.txt, OpenAPI, CLI, official MCP with dynamic client registration), and sign-up plus email verification went through in the browser with no CAPTCHA. But there is no free plan and the 7-day trial needs a card, so the API and CLI refuse with 'No subscription found' and no channel or post can be created.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Most of the core needs a paid plan, so the work is not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "unreached",
     "text": "Most of the core needs a paid plan, so the work is not measured",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Card checkout",
     "value": "not_tried",
     "route": "card_checkout",
     "why": "no_card",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 3.5,
     "core": null
    }
   ],
   "minutes": 3.5,
   "next": {
    "to": 3,
    "text": "Next: let a trial or free plan reach the core features"
   },
   "stop": "first_action",
   "coverage_source": "computed",
   "core": "0/1",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Card required to start the free trial",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/postiz?via=api",
   "json": "https://agentdrives.com/api/tools/postiz.json?via=api"
  },
  {
   "slug": "webflow",
   "name": "Webflow",
   "domain": "webflow.com",
   "icon": "/logos/webflow.png",
   "category": "website-builders",
   "category_name": "Website builders",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 2,
   "level_name": "Gets in",
   "level_selfhost": null,
   "entry": "self-start",
   "badges": [],
   "summary": "Webflow has strong agent surfaces: Markdown docs with llms.txt, an OpenAPI 3.1 spec, and an official remote MCP server on the current 28 Jul 2026 protocol. Sign-up and MCP OAuth worked in a browser, but on the free plan an agent cannot create a site: the dashboard shows a HUMAN press-and-hold check and the Create Site API is Enterprise-only. Without a site, no core capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 0% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "yes",
     "text": "Gets in on its own: sign-up in a browser",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 0% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "browser_signup",
     "label": "Sign-up in a browser",
     "routes": [],
     "minutes": 8.5,
     "core": "0/7"
    }
   ],
   "minutes": 8.5,
   "next": {
    "to": 3,
    "text": "Next: do half of the core work (now 0%)"
   },
   "stop": "first_action",
   "coverage_source": "computed",
   "core": "0/7",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "HUMAN (PerimeterX) invisible sensor",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Press-and-hold bot check on site creation",
   "coverage_core": 0,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/webflow?via=api",
   "json": "https://agentdrives.com/api/tools/webflow.json?via=api"
  },
  {
   "slug": "supabase",
   "name": "Supabase",
   "domain": "supabase.com",
   "icon": "/logos/supabase.png",
   "category": "databases",
   "category_name": "Databases",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Once in, an agent can do nearly all of Supabase headless: all 10 core capabilities passed create-read-update-delete through the Management API, MCP (the 28 Jul 2026 spec) and CLI, with repeats passing except a third user signup that hit the built-in mailer's rate limit (GraphQL first needed pg_graphql enabled). Getting in needs a browser: email sign-up shows an hCaptcha puzzle, so the drive came in with GitHub, and the first organization and token were made in the dashboard. Paying is a dashboard card checkout behind a visible hCaptcha, and the account itself cannot be deleted.",
   "parts": {
    "holds_up": 82,
    "docs_match": null,
    "setup": 100,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "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.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 100% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "no",
     "text": "A person has to buy: a CAPTCHA at checkout",
     "value": "person",
     "route": "portal",
     "why": "captcha"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; deletes its data, but the login stays",
     "at": "delete",
     "left": "data_only"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 100% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "no",
     "text": "A person has to buy: a CAPTCHA at checkout",
     "value": "person",
     "route": "portal",
     "why": "captcha",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; deletes its data, but the login stays",
     "at": "delete",
     "left": "data_only",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "person",
     "label": "A person sets it up",
     "routes": [],
     "minutes": null,
     "core": null
    }
   ],
   "minutes": null,
   "next": {
    "to": 3,
    "text": "Next: let an agent get in on its own in every drive"
   },
   "stop": "pay",
   "coverage_source": "computed",
   "core": "10/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 4,
   "drives": 4,
   "pay": "P1",
   "pays_with": [
    "stripe-projects"
   ],
   "paid": false,
   "first_blocker": "hCaptcha puzzle on email sign-up",
   "coverage_core": 100,
   "mcp": "official",
   "ways_in": [
    "sso_github",
    "device_login",
    "oauth_consent"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/supabase?via=api",
   "json": "https://agentdrives.com/api/tools/supabase.json?via=api"
  },
  {
   "slug": "apify",
   "name": "Apify",
   "domain": "apify.com",
   "icon": "/logos/apify.png",
   "category": "web-scraping",
   "category_name": "Web scraping",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [
    "agent-can-buy"
   ],
   "summary": "An agent with a wallet gets into Apify with no account and no human: we paid $1 over x402 at agi.apify.com and the token ran every core task headless (Actors, storage, own Actor build and deploy, proxy from an Actor), 8 of 9 core capabilities, each repeated three times. The email sign-up shows a reCAPTCHA puzzle, but GitHub sign-in, the device flow and MCP OAuth all work; monetization, token revocation and account deletion are Console-only.",
   "parts": {
    "holds_up": 88,
    "docs_match": null,
    "setup": 100,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     },
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.2"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives",
     "how": "no-account"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 89% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "yes",
     "text": "Pays on its own: paid $1 a call (x402), 16 Oct",
     "value": "paid",
     "route": "agent_rail",
     "per_call": {
      "caps": [
       "cap-01",
       "cap-02",
       "cap-03",
       "cap-04",
       "cap-06",
       "cap-07",
       "cap-08",
       "cap-09"
      ],
      "core": 9,
      "share": 89
     }
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; what it made goes after 14 days",
     "at": "delete",
     "left": "expires",
     "after_hours": 336
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives",
     "how": "no-account",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "yes",
     "text": "Work done: 89% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "yes",
     "text": "Pays on its own: paid $1 a call (x402), 16 Oct",
     "value": "paid",
     "route": "agent_rail",
     "per_call": {
      "caps": [
       "cap-01",
       "cap-02",
       "cap-03",
       "cap-04",
       "cap-06",
       "cap-07",
       "cap-08",
       "cap-09"
      ],
      "core": 9,
      "share": 89
     },
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; what it made goes after 14 days",
     "at": "delete",
     "left": "expires",
     "after_hours": 336,
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "person",
     "label": "A person sets it up",
     "routes": [],
     "minutes": null,
     "core": null
    }
   ],
   "minutes": null,
   "next": {
    "to": 3,
    "text": "Next: let an agent get in on its own in every drive"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "8/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P5",
   "pays_with": [
    "x402"
   ],
   "paid": true,
   "first_blocker": "reCAPTCHA puzzle on the email sign-up form",
   "coverage_core": 89,
   "mcp": "official",
   "ways_in": [
    "keyless",
    "pay_per_call",
    "sso_github",
    "device_login",
    "oauth_consent"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/apify?via=api",
   "json": "https://agentdrives.com/api/tools/apify.json?via=api"
  },
  {
   "slug": "intercom",
   "name": "Intercom",
   "domain": "intercom.com",
   "icon": "/logos/intercom.png",
   "category": "customer-support",
   "category_name": "Customer support",
   "tested_at": "2026-10-15",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent can sign up for Intercom's no-card trial in a browser, take an API token from the Developer Hub web page, and then run the helpdesk headless: conversations, tickets, ticket types, contacts, articles and Fin's knowledge all worked by API and read back cleanly, and Fin and Copilot answered from content the agent added. The Fin Agent API (ask, procedures, escalate) refused our trial with 'not enabled for your app' and has to be requested, tokens can only be made in the browser, and buying goes through a Stripe card form.",
   "parts": {
    "holds_up": 74,
    "docs_match": null,
    "setup": 100,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.1"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 60% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the $39 a month charge",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; deletes its data, but the login stays",
     "at": "delete",
     "left": "data_only"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 60% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the $39 a month charge",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; deletes its data, but the login stays",
     "at": "delete",
     "left": "data_only",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "person",
     "label": "A person sets it up",
     "routes": [],
     "minutes": null,
     "core": null
    }
   ],
   "minutes": null,
   "next": {
    "to": 3,
    "text": "Next: let an agent get in on its own in every drive"
   },
   "stop": null,
   "coverage_source": "computed",
   "core": "6/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "Google reCAPTCHA (invisible) on the sign-up form",
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-15",
    "held": false
   },
   "same_level_drives": 3,
   "drives": 4,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Fin Agent API needs a manual access grant",
   "coverage_core": 60,
   "mcp": "official",
   "ways_in": [
    "email_password",
    "oauth_consent"
   ],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/intercom?via=api",
   "json": "https://agentdrives.com/api/tools/intercom.json?via=api"
  },
  {
   "slug": "copper",
   "name": "Copper",
   "domain": "copper.com",
   "icon": "/logos/copper.png",
   "category": "crm",
   "category_name": "CRM",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Copper's REST API is solid: once an agent has a key it can run the core CRM loop of contacts, deals, stages, won/lost, tasks, activities, custom fields and tags headlessly and verify every step. Getting in is the problem. The visible sign-up is Google-only. Email features depend on Gmail, reports and automations are UI-only, and there is no agent payment rail or self-serve account deletion.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 50,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "part",
     "text": "Work done: 56% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt",
     "have": [
      "llms_txt"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "part",
     "text": "Work done: 56% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Reaches the checkout: stopped at the card form",
     "value": "ready",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "how": "no-account",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "person",
     "label": "A person sets it up",
     "routes": [],
     "minutes": null,
     "core": null
    }
   ],
   "minutes": null,
   "next": {
    "to": 3,
    "text": "Next: let an agent sign up on its own"
   },
   "stop": "signup",
   "coverage_source": "computed",
   "core": "5/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-15",
    "held": true,
    "since": "2026-10-11",
    "drives": 2,
    "until": "2026-10-15"
   },
   "same_level_drives": 1,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Google-only sign-up, API keys only in UI",
   "coverage_core": 56,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/copper?via=api",
   "json": "https://agentdrives.com/api/tools/copper.json?via=api"
  },
  {
   "slug": "activecampaign",
   "name": "ActiveCampaign",
   "domain": "activecampaign.com",
   "icon": "/logos/activecampaign.png",
   "category": "email-marketing",
   "category_name": "Email marketing",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "ActiveCampaign's docs are agent-ready (llms.txt, markdown negotiation, OpenAPI 3.1.0, a docs MCP on the 28 Jul 2026 spec, auth.md, AI catalog), but an agent cannot get in: the free-trial sign-up hits a Cloudflare Turnstile challenge and credentials only come from the app UI. No product capability was driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     },
     {
      "standard": "A2A",
      "state": "behind",
      "behind": 1,
      "value": "0.3.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Cloudflare managed challenge (Turnstile)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the trial sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/activecampaign?via=api",
   "json": "https://agentdrives.com/api/tools/activecampaign.json?via=api"
  },
  {
   "slug": "acuityscheduling",
   "name": "Acuity Scheduling",
   "domain": "acuityscheduling.com",
   "icon": "/logos/acuityscheduling.png",
   "category": "scheduling",
   "category_name": "Scheduling",
   "tested_at": "2026-10-11",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Acuity's docs are agent-friendly (llms.txt, Markdown pages, OpenAPI 3.1.0), but an agent cannot get in: the Squarespace sign-up form stalled silently behind an invisible reCAPTCHA Enterprise check, and robots.txt disallows /api/*, which covers the whole documented REST API. No capability could be driven; paying is a web-only plan choice after a no-card trial.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 85,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an OpenAPI",
     "have": [
      "llms_txt",
      "openapi"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "reCAPTCHA Enterprise (invisible) on Squarespace login",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Invisible reCAPTCHA stalls the Squarespace sign-up form",
   "coverage_core": null,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/acuityscheduling?via=api",
   "json": "https://agentdrives.com/api/tools/acuityscheduling.json?via=api"
  },
  {
   "slug": "akiflow",
   "name": "Akiflow",
   "domain": "akiflow.com",
   "icon": "/logos/akiflow.png",
   "category": "task-management",
   "category_name": "Task management",
   "tested_at": "2026-10-15",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Akiflow on its own: registration answers with a reCAPTCHA image puzzle, the page hides it and hangs. The emailed login code works, and the only agent surface is a hosted MCP server behind OAuth (DCR), so nothing behind the door could be tested. There is no free plan and the 7-day trial needs a card.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 65,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ],
     "docs": "gaps"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Google reCAPTCHA v2 (invisible)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-15",
    "held": false
   },
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA image puzzle on registration",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "gaps",
   "monitored": false,
   "url": "https://agentdrives.com/tools/akiflow?via=api",
   "json": "https://agentdrives.com/api/tools/akiflow.json?via=api"
  },
  {
   "slug": "amplitude",
   "name": "Amplitude",
   "domain": "amplitude.com",
   "icon": "/logos/amplitude.png",
   "category": "product-analytics",
   "category_name": "Product analytics",
   "tested_at": "2026-10-11",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Amplitude is unusually well documented for agents (llms.txt, Markdown pages, OpenAPI 3.1, an AI catalog, an official OAuth MCP server and a public Docs MCP), but an agent cannot get in: the only sign-up is a web form whose invisible reCAPTCHA rejected our agent's browser. No product capability could be driven; paying needs a card in the web app and deleting an org is a monthly support ticket.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "reCAPTCHA (invisible)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [
    "stripe-projects"
   ],
   "paid": false,
   "first_blocker": "Invisible reCAPTCHA rejects agent at sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/amplitude?via=api",
   "json": "https://agentdrives.com/api/tools/amplitude.json?via=api"
  },
  {
   "slug": "asana",
   "name": "Asana",
   "domain": "asana.com",
   "icon": "/logos/asana.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Asana has a large REST API, an official OAuth MCP server and agent-readable Markdown docs, but no way for an agent to get in: the sign-up form's reCAPTCHA Enterprise rejected our agent's browser and showed a visible checkbox. Credentials need the web developer console or a human OAuth consent, so no capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/5",
   "blocks_agent": "Google reCAPTCHA Enterprise (invisible score, then visible checkbox)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA checkbox on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/asana?via=api",
   "json": "https://agentdrives.com/api/tools/asana.json?via=api"
  },
  {
   "slug": "backblaze",
   "name": "Backblaze B2",
   "domain": "backblaze.com",
   "icon": "/logos/backblaze.png",
   "category": "file-storage",
   "category_name": "File storage",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "setup",
   "badges": [],
   "summary": "An agent cannot open a Backblaze account: both sign-up pages show a reCAPTCHA v2 'Security Check' to our agent's browser, so we drove no capability. Without an account the agent side looks good: Markdown docs, llms.txt, and an official MCP server that speaks MCP (the 28 Jul 2026 spec) with 40 tools. Cancel and delete are web-console only, per the docs.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Needs a person to get in",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 0% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Needs a person to get in",
     "at": "signup",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 0% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "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": "verify",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": "Google reCAPTCHA v2 checkbox (on Backblaze's own 'Security Check' page; reCAPTCHA Enterprise script on the form)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA interstitial on the sign-up page",
   "coverage_core": 0,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/backblaze?via=api",
   "json": "https://agentdrives.com/api/tools/backblaze.json?via=api"
  },
  {
   "slug": "baserow",
   "name": "Baserow",
   "domain": "baserow.io",
   "icon": "/logos/baserow.png",
   "category": "databases",
   "category_name": "Databases",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Baserow has a large documented REST API (OpenAPI 3.0.3, 424 operations), an official MCP server and llms.txt, but an agent cannot create an account: sign-up, by API and by web form, needs a Cloudflare Turnstile token. Without an account nothing beyond the docs could be driven; payment is card-only through the signed-in web UI.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/baserow?via=api",
   "json": "https://agentdrives.com/api/tools/baserow.json?via=api"
  },
  {
   "slug": "beehiiv",
   "name": "beehiiv",
   "domain": "beehiiv.com",
   "icon": "/logos/beehiiv.png",
   "category": "email-marketing",
   "category_name": "Email marketing",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "beehiiv's docs are agent-friendly (llms.txt, Markdown twins, OpenAPI 3.1.0, docs and marketing MCPs) and it has an official OAuth MCP server. An agent cannot get in: Cloudflare hard-blocks app.beehiiv.com/signup and /login for our signed agent, headless and in a browser, and API keys can only be made in that app. No core capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/8",
   "blocks_agent": "Cloudflare WAF block page",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare blocks the sign-up page",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/beehiiv?via=api",
   "json": "https://agentdrives.com/api/tools/beehiiv.json?via=api"
  },
  {
   "slug": "bigcommerce",
   "name": "BigCommerce",
   "domain": "bigcommerce.com",
   "icon": "/logos/bigcommerce.png",
   "category": "ecommerce",
   "category_name": "E-commerce",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot open a BigCommerce store on its own: the trial sign-up form shows a visible reCAPTCHA Enterprise checkbox, there is no headless sign-up, and the first API token is created only in the control panel. Before sign-up, the docs serve agents well (llms.txt, Markdown pages, a docs-search MCP, 77 OpenAPI 3.1.0 specs), but no store capability could be reached.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "reCAPTCHA Enterprise (checkbox)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Visible reCAPTCHA on the trial sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/bigcommerce?via=api",
   "json": "https://agentdrives.com/api/tools/bigcommerce.json?via=api"
  },
  {
   "slug": "box",
   "name": "Box",
   "domain": "box.com",
   "icon": "/logos/box.png",
   "category": "file-storage",
   "category_name": "File storage",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Box on its own: both documented sign-ups (personal and free developer) put an hCaptcha checkbox in front of account creation. Everything before the door is strong: Markdown docs with llms.txt, a public OpenAPI (3.0.2), a CLI and an official OAuth MCP server, but first credentials come from the Developer Console UI and paid plans only through a web checkout.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.2"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "hCaptcha",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "hCaptcha on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/box?via=api",
   "json": "https://agentdrives.com/api/tools/box.json?via=api"
  },
  {
   "slug": "brave",
   "name": "Brave Search API",
   "domain": "brave.com",
   "icon": "/logos/brave.png",
   "category": "search-apis",
   "category_name": "Search APIs",
   "tested_at": "2026-10-14",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [
    "agent-can-leave"
   ],
   "summary": "An agent can sign up and verify in a browser, but an API key needs an activated plan, and every plan, even the one with $5 of free monthly credits, needs a card at Stripe Checkout. Without an account, the docs playground ran real web, LLM-context, news, video, image and place searches in a browser, and Brave's own x402 host sells most endpoints per call, but our one payment answered 502 'could not be settled'. The account was deleted in the browser.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "credentials"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Tried to pay: the payment failed on the seller's side",
     "value": "ready",
     "route": "agent_rail",
     "why": "unsettled"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "credentials",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "part",
     "text": "Tried to pay: the payment failed on the seller's side",
     "value": "ready",
     "route": "agent_rail",
     "why": "unsettled",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Leaves on its own: nothing to cancel, deletes its account",
     "how": "no-account",
     "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 get a key on its own"
   },
   "stop": "credentials",
   "coverage_source": "computed",
   "core": "6/7",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "Brave's own proof-of-work captcha ('Verifying you're a human being...')",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P3",
   "pays_with": [
    "x402"
   ],
   "paid": false,
   "first_blocker": "Card required before any API key",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/brave?via=api",
   "json": "https://agentdrives.com/api/tools/brave.json?via=api"
  },
  {
   "slug": "buffer",
   "name": "Buffer",
   "domain": "buffer.com",
   "icon": "/logos/buffer.png",
   "category": "social-media-scheduling",
   "category_name": "Social media scheduling",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Buffer offers a GraphQL API, an official MCP server, a CLI with agent skill files and Markdown docs, but an agent cannot get an account: the web-only sign-up shows an hCaptcha picture puzzle. Without an account there is no API key, so no capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "hCaptcha",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 4,
   "drives": 4,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "hCaptcha puzzle on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/buffer?via=api",
   "json": "https://agentdrives.com/api/tools/buffer.json?via=api"
  },
  {
   "slug": "cal",
   "name": "Cal.com",
   "domain": "cal.com",
   "icon": "/logos/cal.png",
   "category": "scheduling",
   "category_name": "Scheduling",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Cal.com is very well prepared for agents on paper: AI catalog, MCP server card, auth.md, agent skills, llms.txt with markdown docs and a 356-operation OpenAPI. But sign-up has no API and the web form shows a Cloudflare Turnstile that did not clear for our signed agent browser, so the drive never got credentials and drove no core capability.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/8",
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/cal?via=api",
   "json": "https://agentdrives.com/api/tools/cal.json?via=api"
  },
  {
   "slug": "calendly",
   "name": "Calendly",
   "domain": "calendly.com",
   "icon": "/logos/calendly.png",
   "category": "scheduling",
   "category_name": "Scheduling",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Calendly documents its API well for agents (llms.txt, Markdown pages, OpenAPI 3.1, hosted MCP with OAuth and DCR), but creating an account stops at a visible reCAPTCHA v2 after the sign-up form. So no credentials and no scheduling action could be tested.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "reCAPTCHA v2 checkbox",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/calendly?via=api",
   "json": "https://agentdrives.com/api/tools/calendly.json?via=api"
  },
  {
   "slug": "canva",
   "name": "Canva",
   "domain": "canva.com",
   "icon": "/logos/canva.png",
   "category": "design",
   "category_name": "Design",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Canva: every www.canva.com page, including sign-up and the OAuth consent page that REST, MCP and the CLI all need, shows a Cloudflare interstitial that never cleared for our agent's browser. The developer surface around it is strong (Markdown docs, OpenAPI 3.0.0, an official MCP server with PRM, CIMD and DCR, a CLI wrapping the API), but none of it works without that token.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "none"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "unreachable"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "none",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Cloudflare managed challenge (Turnstile interstitial)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P0",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare interstitial on Canva sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "unreachable",
   "monitored": false,
   "url": "https://agentdrives.com/tools/canva?via=api",
   "json": "https://agentdrives.com/api/tools/canva.json?via=api"
  },
  {
   "slug": "chatwoot",
   "name": "Chatwoot",
   "domain": "chatwoot.com",
   "icon": "/logos/chatwoot.png",
   "category": "customer-support",
   "category_name": "Customer support",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Chatwoot's developer surface is strong for agents: llms.txt, Markdown pages, OpenAPI 3.1.0, an official CLI with an agent skill, and a modern docs MCP. But Cloud sign-up shows a visible hCaptcha puzzle, so no account, token or core action was possible on this drive.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 85,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an OpenAPI",
     "have": [
      "llms_txt",
      "openapi"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/8",
   "blocks_agent": "hCaptcha",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Visible hCaptcha puzzle on the sign-up form",
   "coverage_core": null,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/chatwoot?via=api",
   "json": "https://agentdrives.com/api/tools/chatwoot.json?via=api"
  },
  {
   "slug": "clickup",
   "name": "ClickUp",
   "domain": "clickup.com",
   "icon": "/logos/clickup.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "ClickUp has strong agent-facing docs (llms.txt, markdown pages, OpenAPI v2 and v3) and an official remote MCP server with OAuth discovery, but an agent cannot get in on its own: the only email sign-up shows a visible reCAPTCHA v2 checkbox. With no account there was no token, so none of the map's capabilities could be tried.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Google reCAPTCHA v2 (checkbox)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-16",
    "held": false
   },
   "same_level_drives": 4,
   "drives": 4,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Visible reCAPTCHA on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/clickup?via=api",
   "json": "https://agentdrives.com/api/tools/clickup.json?via=api"
  },
  {
   "slug": "close",
   "name": "Close",
   "domain": "close.com",
   "icon": "/logos/close.png",
   "category": "crm",
   "category_name": "CRM",
   "tested_at": "2026-10-11",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Close's sign-up refused our agent's browser through an invisible reCAPTCHA check, with no challenge a human could solve, so we never got an account, key or token. Its public agent surface is good: llms.txt, an OpenAPI 3.1.0 spec, Markdown docs and an official MCP server with OAuth DCR that worked headless. No agent payment rail; the trial needs no card.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "reCAPTCHA (invisible)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Invisible reCAPTCHA refuses the sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/close?via=api",
   "json": "https://agentdrives.com/api/tools/close.json?via=api"
  },
  {
   "slug": "crisp",
   "name": "Crisp",
   "domain": "crisp.chat",
   "icon": "/logos/crisp.png",
   "category": "customer-support",
   "category_name": "Customer support",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Crisp has a broad REST API, official SDKs and an official MCP server, but an agent cannot get in on its own: the workspace sign-up shows a visible hCaptcha puzzle and every working token is issued inside the workspace dashboard. Without a human we reached only docs, the MCP tool list and an empty plugin dev-token call; no core capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 55,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an MCP server",
     "have": [
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "hCaptcha",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "hCaptcha puzzle on the workspace sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/crisp?via=api",
   "json": "https://agentdrives.com/api/tools/crisp.json?via=api"
  },
  {
   "slug": "docusign",
   "name": "DocuSign",
   "domain": "docusign.com",
   "icon": "/logos/docusign.png",
   "category": "e-signature",
   "category_name": "E-signature",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Docusign's docs, Swagger specs and MCP auth metadata are public, but both ways in (the free developer account and the free trial) stop at an Arkose Labs puzzle, so our agent never got an account. Even past it, robots.txt disallows the REST base path /restapi/, the Apps and Keys page and the demo MCP server to every agent, and integration keys are made only in the web UI.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 80,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 3,
      "value": "2.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an OpenAPI and an MCP server",
     "have": [
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Arkose Labs (FunCaptcha)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Arkose Labs puzzle on every sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/docusign?via=api",
   "json": "https://agentdrives.com/api/tools/docusign.json?via=api"
  },
  {
   "slug": "dropbox",
   "name": "Dropbox",
   "domain": "dropbox.com",
   "icon": "/logos/dropbox.png",
   "category": "file-storage",
   "category_name": "File storage",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Dropbox's only sign-up is a web form that shows an Arkose Labs puzzle, so an agent cannot get an account on its own and no capability could be tried. Without an account the agent surface is good: public API docs, llms.txt, an official MCP server with valid PRM, and headless OAuth client registration via DCR. Paid trials ask for a card, PayPal or IBAN.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Arkose Labs (FunCaptcha)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Arkose puzzle on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/dropbox?via=api",
   "json": "https://agentdrives.com/api/tools/dropbox.json?via=api"
  },
  {
   "slug": "ecwid",
   "name": "Ecwid",
   "domain": "ecwid.com",
   "icon": "/logos/ecwid.png",
   "category": "ecommerce",
   "category_name": "E-commerce",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent can read Ecwid's developer docs well (llms.txt, Markdown pages, a docs-search MCP), but it cannot open a store: the sign-up form shows a visible Cloudflare Turnstile checkbox, and there is no API sign-up. Even past that, the docs say the REST API works only for paid-plan stores, and tokens come only from the web control panel.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 50,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt",
     "have": [
      "llms_txt"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/ecwid?via=api",
   "json": "https://agentdrives.com/api/tools/ecwid.json?via=api"
  },
  {
   "slug": "usefathom",
   "name": "Fathom Analytics",
   "domain": "usefathom.com",
   "icon": "/logos/usefathom.png",
   "category": "web-analytics",
   "category_name": "Web analytics",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Fathom Analytics has a clean, agent-friendly API surface (llms.txt, Markdown API reference, OpenAPI 3.1.0), but an agent cannot get in: the only way to start is a 7-day trial whose sign-up form requires a credit card and ZIP code, and API tokens are made in the web app. We could not create an account, so no core capability was driven; only the free UTM builder and the public demo dashboard worked.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 80,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Needs a card to start",
     "at": "signup",
     "how": "card"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Needs a card to start",
     "at": "signup",
     "how": "card",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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 start without a card"
   },
   "stop": "signup",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Credit card required to sign up",
   "coverage_core": null,
   "mcp": "third-party",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/usefathom?via=api",
   "json": "https://agentdrives.com/api/tools/usefathom.json?via=api"
  },
  {
   "slug": "figma",
   "name": "Figma",
   "domain": "figma.com",
   "icon": "/logos/figma.png",
   "category": "design",
   "category_name": "Design",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Figma on its own: robots.txt disallows /signup, /login and the MCP consent page for AI agents that act for a user, and the MCP server's client registration answers 403 to clients outside Figma's catalog. The docs are strong (llms.txt, an OpenAPI 3.1 spec, a documented MCP server), but no capability could be driven without an account.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "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": "portal"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "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": "portal",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "named",
    "step": "signup",
    "seen": "2026-10-16",
    "held": false
   },
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "robots.txt closes sign-up to AI agents",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/figma?via=api",
   "json": "https://agentdrives.com/api/tools/figma.json?via=api"
  },
  {
   "slug": "folk",
   "name": "folk",
   "domain": "folk.app",
   "icon": "/logos/folk.png",
   "category": "crm",
   "category_name": "CRM",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "folk documents its API and official MCP server well (llms.txt, Markdown pages, OpenAPI 3.1.0, PRM and CIMD/DCR on the MCP OAuth). An agent can start sign-up in the browser, but the emailed magic link runs Stytch Device Fingerprinting, which rejected our agent's browser twice with a 'Login Error'. Without a session there is no API key or MCP token, so no CRM capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "verify"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "verify",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "left": "stuck",
     "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 verify its account on its own"
   },
   "stop": "verify",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Stytch Device Fingerprinting (magic-link redirect)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Stytch fingerprint check blocks magic-link login",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/folk?via=api",
   "json": "https://agentdrives.com/api/tools/folk.json?via=api"
  },
  {
   "slug": "formspree",
   "name": "Formspree",
   "domain": "formspree.io",
   "icon": "/logos/formspree.png",
   "category": "forms",
   "category_name": "Forms",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Formspree on its own: sign-up is a web form, and Register raised a reCAPTCHA v2 picture puzzle. Every way to create a form (dashboard, claim URL, CLI deploy key) needs that account. The docs serve agents well (llms.txt, Markdown articles), but there is no MCP server, OpenAPI spec or agent auth.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 60,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt",
     "have": [
      "llms_txt"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/6",
   "blocks_agent": "Google reCAPTCHA v2",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA picture puzzle on the sign-up form",
   "coverage_core": null,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/formspree?via=api",
   "json": "https://agentdrives.com/api/tools/formspree.json?via=api"
  },
  {
   "slug": "framer",
   "name": "Framer",
   "domain": "framer.com",
   "icon": "/logos/framer.png",
   "category": "website-builders",
   "category_name": "Website builders",
   "tested_at": "2026-10-11",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Framer's docs are very agent-readable (llms.txt, markdown on every page) and it offers a CLI, a Server API package and an OAuth MCP endpoint. But our signed agent could not open an account: the email step is refused by an invisible Castle risk check (403 'Access denied by policy') with no challenge to hand to a human, so nothing behind the login could be tried.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": "Castle (risk SDK castleSDKV3)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Invisible risk check refuses sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/framer?via=api",
   "json": "https://agentdrives.com/api/tools/framer.json?via=api"
  },
  {
   "slug": "freshbooks",
   "name": "FreshBooks",
   "domain": "freshbooks.com",
   "icon": "/logos/freshbooks.png",
   "category": "invoicing",
   "category_name": "Invoicing",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into FreshBooks alone: the sign-up page on auth.freshbooks.com showed our agent's browser a visible reCAPTCHA image puzzle, so no capability was driven. Without an account an agent finds good HTML docs, SDKs, webhooks, an official OAuth-protected MCP server with correct Protected Resource Metadata, and can register its own OAuth client via DCR, but every data route needs a logged-in user.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 55,
    "security": "private",
    "standards": [
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an MCP server",
     "have": [
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Google reCAPTCHA Enterprise challenge page (waf=session) on auth.freshbooks.com",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA image puzzle on sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/freshbooks?via=api",
   "json": "https://agentdrives.com/api/tools/freshbooks.json?via=api"
  },
  {
   "slug": "freshdesk",
   "name": "Freshdesk",
   "domain": "freshdesk.com",
   "icon": "/logos/freshdesk.png",
   "category": "customer-support",
   "category_name": "Customer support",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Freshdesk has a documented REST API and an official MCP server (API-key auth, Growth plan and up), but an agent cannot get an account: the sign-up page on www.freshworks.com is behind a Cloudflare managed challenge that our signed agent did not pass. Docs are readable headless. The MCP 401 points to Protected Resource Metadata that returns 404, and there is no OpenAPI, no agent payment rail and no billing API.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 65,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": "Cloudflare managed challenge (Turnstile 'Verify you are human' interstitial)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare challenge on the sign-up page",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/freshdesk?via=api",
   "json": "https://agentdrives.com/api/tools/freshdesk.json?via=api"
  },
  {
   "slug": "front",
   "name": "Front",
   "domain": "front.com",
   "icon": "/logos/front.png",
   "category": "customer-support",
   "category_name": "Customer support",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Front's docs are well prepared for agents (llms.txt, Markdown pages, OpenAPI, an official MCP server), but an agent cannot get in: the only sign-up route is a web form that requires a phone number, and API tokens and MCP OAuth clients are only made inside an account. No core capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Phone number required on trial sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/front?via=api",
   "json": "https://agentdrives.com/api/tools/front.json?via=api"
  },
  {
   "slug": "gorgias",
   "name": "Gorgias",
   "domain": "gorgias.com",
   "icon": "/logos/gorgias.png",
   "category": "customer-support",
   "category_name": "Customer support",
   "tested_at": "2026-10-11",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot open a Gorgias account: the sign-up form's invisible Cloudflare Turnstile never cleared for our agent's browser, and no API sign-up exists. Outside the account Gorgias is agent-ready: an official MCP server with 155 tools and OAuth metadata, markdown API docs with OpenAPI 3.1.0, and a no-card trial. Behind the door, tenant robots.txt disallows the REST API for every agent.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Cloudflare Turnstile (invisible) plus reCAPTCHA v3",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Invisible Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/gorgias?via=api",
   "json": "https://agentdrives.com/api/tools/gorgias.json?via=api"
  },
  {
   "slug": "heap",
   "name": "Heap",
   "domain": "heap.io",
   "icon": "/logos/heap.png",
   "category": "product-analytics",
   "category_name": "Product analytics",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Heap's developer docs suit agents: an llms.txt, Markdown pages and an OpenAPI 3.1.0 definition per reference page. The only sign-up route is a web form, and it showed a reCAPTCHA image puzzle to our agent. No account was made and no capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an OpenAPI",
     "have": [
      "llms_txt",
      "openapi"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Google reCAPTCHA v2 (image challenge)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA image puzzle on sign-up form",
   "coverage_core": null,
   "mcp": null,
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/heap?via=api",
   "json": "https://agentdrives.com/api/tools/heap.json?via=api"
  },
  {
   "slug": "helpscout",
   "name": "Help Scout",
   "domain": "helpscout.com",
   "icon": "/logos/helpscout.png",
   "category": "customer-support",
   "category_name": "Customer support",
   "tested_at": "2026-10-15",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Help Scout's sign-up form accepts an agent's address without a bot check, but then requires an SMS code to a phone number before the account exists, so an agent alone gets no account, no key and no API or MCP call. The docs (developer llms.txt) and the official MCP server's OAuth metadata (PRM, DCR) are agent-readable.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "portal"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt; a docs page for each core task",
     "have": [
      "llms_txt"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "portal",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-15",
    "held": false
   },
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Phone SMS verification at sign-up",
   "coverage_core": null,
   "mcp": null,
   "ways_in": [],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/helpscout?via=api",
   "json": "https://agentdrives.com/api/tools/helpscout.json?via=api"
  },
  {
   "slug": "hubspot",
   "name": "HubSpot",
   "domain": "hubspot.com",
   "icon": "/logos/hubspot.png",
   "category": "crm",
   "category_name": "CRM",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "HubSpot's docs are agent-friendly (llms.txt, markdown pages, an official MCP server and an Agent CLI), but an agent cannot get in on its own: the email sign-up shows a visible reCAPTCHA checkbox before the code is sent. Every capability, the key, MCP and the checkout sit behind that wall, so nothing in the CRM was driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.1"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Google reCAPTCHA v2 checkbox",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-16",
    "held": false
   },
   "same_level_drives": 4,
   "drives": 4,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Visible reCAPTCHA checkbox on email sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/hubspot?via=api",
   "json": "https://agentdrives.com/api/tools/hubspot.json?via=api"
  },
  {
   "slug": "invoiceninja",
   "name": "Invoice Ninja",
   "domain": "invoiceninja.com",
   "icon": "/logos/invoiceninja.png",
   "category": "invoicing",
   "category_name": "Invoicing",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "setup",
   "badges": [],
   "summary": "Invoice Ninja has a broad, well-documented REST API (OpenAPI, 365 operations) and the production API answers agents from a datacenter without bot checks, but an agent cannot get an account: the only sign-up is a web form with a visible Cloudflare Turnstile checkbox. The documented demo sandbox is also behind a Cloudflare challenge, and REST API tokens are a Pro feature, so no capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 70,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Needs a person to get in",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "no",
     "text": "Work done: 0% of the core"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an OpenAPI and an MCP server",
     "have": [
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Needs a person to get in",
     "at": "signup",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "no",
     "text": "Work done: 0% of the core",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "yes",
     "text": "Nothing to cancel; can't delete its account",
     "at": "delete",
     "left": "stuck",
     "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": "verify",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": 0,
   "mcp": "third-party",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/invoiceninja?via=api",
   "json": "https://agentdrives.com/api/tools/invoiceninja.json?via=api"
  },
  {
   "slug": "atlassian",
   "name": "Jira",
   "domain": "atlassian.com",
   "icon": "/logos/atlassian.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-14",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Jira on its own: both email sign-ups are stopped by reCAPTCHA (an invisible score refusal, then a visible checkbox). The docs, llms.txt and the official MCP server's OAuth metadata (PRM, DCR) are agent-friendly, but every capability sits behind an account, so none could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.1"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "portal"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "portal",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Google reCAPTCHA (score, captcha_type=google-score)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 4,
   "drives": 4,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA on the Atlassian sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/atlassian?via=api",
   "json": "https://agentdrives.com/api/tools/atlassian.json?via=api"
  },
  {
   "slug": "jotform",
   "name": "Jotform",
   "domain": "jotform.com",
   "icon": "/logos/jotform.png",
   "category": "forms",
   "category_name": "Forms",
   "tested_at": "2026-10-02",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Jotform has a broad documented REST API, SDKs and an official OAuth MCP server, but our agent never got credentials. Documented sign-up fails on an undocumented terms field and the web sign-up shows reCAPTCHA v2.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 55,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an MCP server",
     "have": [
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "reCAPTCHA v2 (checkbox)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "No API key: login drift and 429 throttling",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/jotform?via=api",
   "json": "https://agentdrives.com/api/tools/jotform.json?via=api"
  },
  {
   "slug": "kit",
   "name": "Kit",
   "domain": "kit.com",
   "icon": "/logos/kit.png",
   "category": "email-marketing",
   "category_name": "Email marketing",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Kit's developer docs are agent-friendly (llms.txt, Markdown pages, OpenAPI 3.0.3, a docs MCP on the 28 Jul 2026 spec), but app.kit.com/users/signup and all of kit.com answer our signed agent with a Cloudflare 'Verify you are human' challenge, so no account, key or core task was reached. Credentials come only from the web app (API key) or an OAuth consent by a signed-in creator; Kit's docs say the API and the Kit MCP are not available on the free plan.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Cloudflare managed challenge (Turnstile 'Verify you are human')",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare challenge on the sign-up page",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/kit?via=api",
   "json": "https://agentdrives.com/api/tools/kit.json?via=api"
  },
  {
   "slug": "klaviyo",
   "name": "Klaviyo",
   "domain": "klaviyo.com",
   "icon": "/logos/klaviyo.png",
   "category": "email-marketing",
   "category_name": "Email marketing",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Klaviyo has a strong agent surface on paper: a 345-operation REST API with an OpenAPI spec, Markdown docs, an llms.txt, and an official MCP server (remote with OAuth/CIMD, local with an API key). An agent cannot get in on its own: the free sign-up form makes a phone number mandatory and there is no API or agent sign-up, so no capability could be driven. The local MCP server still speaks MCP (the 25 Nov 2025 spec) and there is no agent payment rail.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.2"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/7",
   "blocks_agent": "reCAPTCHA",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Phone number required on sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/klaviyo?via=api",
   "json": "https://agentdrives.com/api/tools/klaviyo.json?via=api"
  },
  {
   "slug": "lemonsqueezy",
   "name": "Lemon Squeezy",
   "domain": "lemonsqueezy.com",
   "icon": "/logos/lemonsqueezy.png",
   "category": "payments",
   "category_name": "Payments",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot sign up for Lemon Squeezy: the registration form needs a reCAPTCHA v2 checkbox, and there is no API sign-up. Without an account no core capability could be driven; only the docs, the public License API and the official JS SDK are reachable. API keys and products are dashboard-only.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 45,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an MCP server",
     "have": [
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "reCAPTCHA v2 checkbox",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA checkbox on the sign-up form",
   "coverage_core": null,
   "mcp": "third-party",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/lemonsqueezy?via=api",
   "json": "https://agentdrives.com/api/tools/lemonsqueezy.json?via=api"
  },
  {
   "slug": "linear",
   "name": "Linear",
   "domain": "linear.app",
   "icon": "/logos/linear.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Linear on its own: the email sign-up shows a visible Cloudflare Turnstile and no other way in fits an agent (Google needs an account we lack, no GitHub, no API sign-up). The docs are excellent for agents (llms.txt, Markdown pages, a public GraphQL schema, an official MCP server that takes API keys), but all of it needs an account.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "portal"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "portal",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 4,
   "drives": 4,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Visible Turnstile on email sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/linear?via=api",
   "json": "https://agentdrives.com/api/tools/linear.json?via=api"
  },
  {
   "slug": "mailchimp",
   "name": "Mailchimp",
   "domain": "mailchimp.com",
   "icon": "/logos/mailchimp.png",
   "category": "email-marketing",
   "category_name": "Email marketing",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Mailchimp's developer docs are agent-friendly: llms.txt, Markdown pages, agent skills and a docs-search MCP (legacy, its tool failing). An agent cannot get in: sign-up is web-only and its reCAPTCHA showed a visible image puzzle, so no API key and no capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 3,
      "value": "2.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": "Google reCAPTCHA (invisible, escalated to v2 image challenge)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA image challenge on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/mailchimp?via=api",
   "json": "https://agentdrives.com/api/tools/mailchimp.json?via=api"
  },
  {
   "slug": "mailerlite",
   "name": "MailerLite",
   "domain": "mailerlite.com",
   "icon": "/logos/mailerlite.png",
   "category": "email-marketing",
   "category_name": "Email marketing",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "MailerLite has a strong agent surface on paper: Markdown docs with llms.txt, an official CLI, six SDKs and a hosted OAuth MCP server with 77 tools. An agent cannot get in on its own: the only sign-up is a web form behind a visible Cloudflare Turnstile, so nothing in the product was driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/mailerlite?via=api",
   "json": "https://agentdrives.com/api/tools/mailerlite.json?via=api"
  },
  {
   "slug": "mailgun",
   "name": "Mailgun",
   "domain": "mailgun.com",
   "icon": "/logos/mailgun.png",
   "category": "email-infrastructure",
   "category_name": "Email infrastructure",
   "tested_at": "2026-10-11",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Mailgun: the free sign-up form was rejected by an invisible reCAPTCHA (\"Could not validate reCaptcha response\") and there is no API sign-up. Even with an account, robots.txt on api.mailgun.net disallows every path for all user agents. The docs are agent-friendly (llms.txt, .md pages, OpenAPI 3.1.0) and there is an official local MCP server with 74 tools on the 25 Nov 2025 spec.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Google reCAPTCHA (invisible)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Invisible reCAPTCHA rejects the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/mailgun?via=api",
   "json": "https://agentdrives.com/api/tools/mailgun.json?via=api"
  },
  {
   "slug": "mailtrap",
   "name": "Mailtrap",
   "domain": "mailtrap.io",
   "icon": "/logos/mailtrap.png",
   "category": "email-infrastructure",
   "category_name": "Email infrastructure",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Mailtrap has strong agent surfaces on paper: llms.txt and Markdown docs, OpenAPI 3.1.0 (136 operations), an official CLI and a stdio MCP server with 125 tools. But sign-up is a web form that showed our agent's browser a visible reCAPTCHA checkbox, and tokens are only made in the web app, so an agent cannot get in on its own and no core capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Google reCAPTCHA (invisible, escalating to v2 checkbox)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA checkbox on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/mailtrap?via=api",
   "json": "https://agentdrives.com/api/tools/mailtrap.json?via=api"
  },
  {
   "slug": "make",
   "name": "Make",
   "domain": "make.com",
   "icon": "/logos/make.png",
   "category": "automation",
   "category_name": "Automation",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Make documents a full REST API, CLI, SDK and hosted MCP server, and its docs are agent-friendly (llms.txt, markdown). But sign-up, login and OAuth consent all run through www.make.com pages behind a Cloudflare managed challenge that did not clear for our signed agent, so no account, token or capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/8",
   "blocks_agent": "Cloudflare managed challenge (interstitial)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare challenge on sign-up and login",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/make?via=api",
   "json": "https://agentdrives.com/api/tools/make.json?via=api"
  },
  {
   "slug": "mollie",
   "name": "Mollie",
   "domain": "mollie.com",
   "icon": "/logos/mollie.png",
   "category": "payments",
   "category_name": "Payments",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot open a Mollie account: the sign-up form's reCAPTCHA rejected our agent's browser and showed a picture puzzle. Mollie's agent-facing docs are strong (llms.txt, markdown pages, Agent Skills, OpenAPI 3.1.0) and its official MCP server uses OAuth with CIMD, but API keys come only from the Web App. No capability could be tested.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "na",
     "text": "No plan to buy",
     "value": "nothing",
     "route": "none"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "na",
     "text": "No plan to buy",
     "value": "nothing",
     "route": "none",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Google reCAPTCHA (score, then image challenge page)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "n/a",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA picture puzzle on sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/mollie?via=api",
   "json": "https://agentdrives.com/api/tools/mollie.json?via=api"
  },
  {
   "slug": "moneybird",
   "name": "Moneybird",
   "domain": "moneybird.com",
   "icon": "/logos/moneybird.png",
   "category": "invoicing",
   "category_name": "Invoicing",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Moneybird has unusually good agent tooling on paper: an official MCP server with OAuth (PRM, DCR and CIMD), an official CLI, a 297-operation OpenAPI 3.1 spec and llms.txt. But an agent cannot get in on its own: the only sign-up is a web form behind invisible reCAPTCHA, which gave our agent's browser no token, no puzzle and no error, so no account, token or API call was possible and no core capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Google reCAPTCHA v2 (invisible)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 4,
   "drives": 4,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Invisible reCAPTCHA silently blocks the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/moneybird?via=api",
   "json": "https://agentdrives.com/api/tools/moneybird.json?via=api"
  },
  {
   "slug": "mongodb",
   "name": "MongoDB Atlas",
   "domain": "mongodb.com",
   "icon": "/logos/mongodb.png",
   "category": "databases",
   "category_name": "Databases",
   "tested_at": "2026-10-11",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into MongoDB Atlas on its own: the sign-up form's invisible reCAPTCHA rejected our signed agent (INVALID_CAPTCHA, shown as a 'server error'), and robots.txt disallows the Atlas CLI's sign-up page. Outside the account it is strong for agents: llms.txt, Markdown docs, a 522-operation OpenAPI, and an official MCP server that speaks MCP (the 28 Jul 2026 spec) with CIMD-capable OAuth.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.1"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/8",
   "blocks_agent": "Google reCAPTCHA (invisible)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Invisible reCAPTCHA rejects the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/mongodb?via=api",
   "json": "https://agentdrives.com/api/tools/mongodb.json?via=api"
  },
  {
   "slug": "n8n",
   "name": "n8n",
   "domain": "n8n.io",
   "icon": "/logos/n8n.png",
   "category": "automation",
   "category_name": "Automation",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "n8n's docs are agent-friendly (llms.txt, Markdown pages, a docs MCP server) and the product offers an official MCP server, a public API and a CLI. Our agent verified its email but could not finish sign-up: the last form carries a visible Cloudflare Turnstile box, so no instance, key or workflow was reached. Even past sign-up, the docs say the public API is not on the free trial, and API keys and MCP tokens are made only in the web UI.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/n8n?via=api",
   "json": "https://agentdrives.com/api/tools/n8n.json?via=api"
  },
  {
   "slug": "notion",
   "name": "Notion",
   "domain": "notion.com",
   "icon": "/logos/notion.png",
   "category": "workspace",
   "category_name": "Docs and workspace",
   "tested_at": "2026-10-01",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Notion has an excellent agent surface on paper: REST API with OpenAPI, the ntn CLI, an official hosted MCP server with dynamic client registration, webhooks and markdown docs with llms.txt. The agent could not get in: sign-up is browser-only, the first verification code never arrived, and every later request, including one from a fresh address, got 'Signup is not allowed.' from the server. No core capability could be exercised.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Sign-up refused: 'Signup is not allowed'",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/notion?via=api",
   "json": "https://agentdrives.com/api/tools/notion.json?via=api"
  },
  {
   "slug": "pandadoc",
   "name": "PandaDoc",
   "domain": "pandadoc.com",
   "icon": "/logos/pandadoc.png",
   "category": "e-signature",
   "category_name": "E-signature",
   "tested_at": "2026-10-15",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "PandaDoc's developer docs are among the most agent-ready we have seen (llms.txt, markdown pages, OpenAPI, a keyless docs MCP and an official OAuth MCP server), but an agent cannot get in: the free trial sign-up passes both form steps and then its invisible reCAPTCHA answers \"Captcha is not valid\" to our agent's browser. With no account there is no key or MCP session, so none of the 9 core capabilities could be tried.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "portal"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server; a docs page for each core task",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "complete"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "portal",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": "Google reCAPTCHA (invisible, score)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-15",
    "held": false
   },
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Invisible reCAPTCHA refuses sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "complete",
   "monitored": false,
   "url": "https://agentdrives.com/tools/pandadoc?via=api",
   "json": "https://agentdrives.com/api/tools/pandadoc.json?via=api"
  },
  {
   "slug": "perplexity",
   "name": "Perplexity API",
   "domain": "perplexity.ai",
   "icon": "/logos/perplexity.png",
   "category": "search-apis",
   "category_name": "Search APIs",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Perplexity's docs are agent-ready (llms.txt, markdown pages, six OpenAPI specs, an official hosted MCP server with RFC 9728 metadata and CIMD), but an agent cannot get in: console.perplexity.ai and www.perplexity.ai answer our signed agent with a Cloudflare 'Verify you are human' challenge, also in a real browser. Without a key every API, CLI and MCP call returns 401, so no capability was driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     },
     {
      "standard": "A2A",
      "state": "behind",
      "behind": 1,
      "value": "0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Most of the core needs a paid plan, so the work is not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "billing_api"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "stage": "in"
    },
    {
     "key": "use",
     "label": "Use",
     "state": "unreached",
     "text": "Most of the core needs a paid plan, so the work is not measured",
     "stage": "work"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "billing_api",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/3",
   "blocks_agent": "Cloudflare managed challenge (Turnstile 'Verify you are human')",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P3",
   "pays_with": [
    "stripe-projects"
   ],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on console sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/perplexity?via=api",
   "json": "https://agentdrives.com/api/tools/perplexity.json?via=api"
  },
  {
   "slug": "pinata",
   "name": "Pinata",
   "domain": "pinata.cloud",
   "icon": "/logos/pinata.png",
   "category": "file-storage",
   "category_name": "File storage",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Pinata's docs are very agent-friendly (llms.txt, markdown, a modern docs MCP), and it runs a first-party MPP endpoint that sells account-free IPFS uploads and downloads. But sign-up is a web form behind a visible Cloudflare Turnstile and API keys come only from the dashboard, so our agent got no account: it could only read public CIDs through the gateway.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     },
     {
      "standard": "A2A",
      "state": "behind",
      "behind": 1,
      "value": "0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "agent_rail"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "agent_rail",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "1/7",
   "blocks_agent": "Cloudflare Turnstile (on the Clerk sign-up form)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 4,
   "drives": 4,
   "pay": "P3",
   "pays_with": [
    "mpp"
   ],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/pinata?via=api",
   "json": "https://agentdrives.com/api/tools/pinata.json?via=api"
  },
  {
   "slug": "pirsch",
   "name": "Pirsch",
   "domain": "pirsch.io",
   "icon": "/logos/pirsch.png",
   "category": "web-analytics",
   "category_name": "Web analytics",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Pirsch has a large, well documented REST API (about 150 operations, including account delete) and a docs-linked third-party MCP server that speaks MCP (the 28 Jul 2026 spec), but an agent cannot get in: sign-up is a web form with an ALTCHA 'I'm not a robot' checkbox and there is no sign-up API. So no capability was driven. Paying is a hosted Stripe checkout; the 30-day trial needs no card.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 45,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an MCP server",
     "have": [
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "ALTCHA (proof of work)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "ALTCHA checkbox on the sign-up form",
   "coverage_core": null,
   "mcp": "third-party",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/pirsch?via=api",
   "json": "https://agentdrives.com/api/tools/pirsch.json?via=api"
  },
  {
   "slug": "plain",
   "name": "Plain",
   "domain": "plain.com",
   "icon": "/logos/plain.png",
   "category": "customer-support",
   "category_name": "Customer support",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Plain has a public GraphQL schema, SDK, CLI, an official OAuth MCP server and markdown docs, but an agent cannot create an account: the WorkOS sign-up page shows a visible Cloudflare Turnstile and the email sign-in path answered 'Access blocked'. No capability could be driven; billing (7-day no-card trial, plan change by API, card in a Hyperline portal) is graded from docs only.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "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": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/8",
   "blocks_agent": "Cloudflare Turnstile (managed challenge)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P3",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up page",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/plain?via=api",
   "json": "https://agentdrives.com/api/tools/plain.json?via=api"
  },
  {
   "slug": "polar",
   "name": "Polar",
   "domain": "polar.sh",
   "icon": "/logos/polar.png",
   "category": "payments",
   "category_name": "Payments",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Polar's docs are agent-ready (llms.txt, Markdown pages, OpenAPI 3.1.0, CLI, OAuth MCP server), but our agent could not get in: email sign-in sits behind a Cloudflare Turnstile widget that failed our agent's browser. API tokens are dashboard-only, so no capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the email sign-in",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/polar?via=api",
   "json": "https://agentdrives.com/api/tools/polar.json?via=api"
  },
  {
   "slug": "posthog",
   "name": "PostHog",
   "domain": "posthog.com",
   "icon": "/logos/posthog.png",
   "category": "product-analytics",
   "category_name": "Product analytics",
   "tested_at": "2026-10-03",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "PostHog is very well documented for agents: llms.txt, Markdown for every page, a public OpenAPI spec, an MCP server with OAuth discovery and an auth.md manifest. But our agent could not get an account: the documented headless sign-up (the wizard's provisioning) returned 403, and the web form ends in a Cloudflare Turnstile. Nothing past the docs could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Cloudflare Turnstile (visible 'Verify you are human' on the last sign-up step)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 4,
   "pay": "P2",
   "pays_with": [
    "stripe-projects"
   ],
   "paid": false,
   "first_blocker": "Turnstile on sign-up; wizard sign-up refused (403)",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/posthog?via=api",
   "json": "https://agentdrives.com/api/tools/posthog.json?via=api"
  },
  {
   "slug": "postmarkapp",
   "name": "Postmark",
   "domain": "postmarkapp.com",
   "icon": "/logos/postmarkapp.png",
   "category": "email-infrastructure",
   "category_name": "Email infrastructure",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Postmark's agent-facing docs are unusually complete (llms.txt, AI catalog, auth.md, api-catalog, Agent Skills, MCP server card) and the test token lets an agent dry-run sends with no account. But sign-up is a web form whose reCAPTCHA escalated to a picture challenge for our agent's browser, and tokens can only be issued by a human in the UI, so no real send, template or domain work was possible.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 3,
      "value": "2.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Google reCAPTCHA v2 (invisible, escalated to image challenge); eHawk Talon fingerprint field also on the form",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA picture challenge on sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/postmarkapp?via=api",
   "json": "https://agentdrives.com/api/tools/postmarkapp.json?via=api"
  },
  {
   "slug": "publer",
   "name": "Publer",
   "domain": "publer.com",
   "icon": "/logos/publer.png",
   "category": "social-media-scheduling",
   "category_name": "Social media scheduling",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Publer: the only sign-up is a web form whose reCAPTCHA showed our agent's browser a picture puzzle. Even with an account, the API and official MCP server are Business/Enterprise only and keys are made in the web UI. The docs are very agent-friendly (llms.txt, markdown pages, ask endpoint).",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": "private",
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.1"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Google reCAPTCHA v2 (invisible)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA picture puzzle on sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/publer?via=api",
   "json": "https://agentdrives.com/api/tools/publer.json?via=api"
  },
  {
   "slug": "render",
   "name": "Render",
   "domain": "render.com",
   "icon": "/logos/render.png",
   "category": "hosting",
   "category_name": "Hosting and deploys",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Render's agent docs are excellent: llms.txt, Markdown for every page, a docs-search API and a hosted MCP server. But an agent cannot get in: the email sign-up shows an hCaptcha puzzle, API keys are made only in the dashboard, MCP OAuth needs a pre-registered client, and robots.txt disallows the whole API host and the dashboard. No capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.2"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "agent_rail"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "agent_rail",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "hCaptcha",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P3",
   "pays_with": [
    "stripe-projects"
   ],
   "paid": false,
   "first_blocker": "hCaptcha puzzle on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/render?via=api",
   "json": "https://agentdrives.com/api/tools/render.json?via=api"
  },
  {
   "slug": "resend",
   "name": "Resend",
   "domain": "resend.com",
   "icon": "/logos/resend.png",
   "category": "email-infrastructure",
   "category_name": "Email infrastructure",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Resend publishes agent docs (llms.txt, markdown pages, OpenAPI, auth.md, skills, CLI, OAuth MCP server), but our agent could not get an account: the sign-up form returned a generic server error twice, with no visible challenge to hand to a human. Without an account there is no API key, so none of the capabilities could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "hCaptcha (passive, via Stripe Radar) with Fingerprint visitor data",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 4,
   "drives": 4,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Sign-up fails with a generic error, no reason given",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/resend?via=api",
   "json": "https://agentdrives.com/api/tools/resend.json?via=api"
  },
  {
   "slug": "salesforce",
   "name": "Salesforce",
   "domain": "salesforce.com",
   "icon": "/logos/salesforce.png",
   "category": "crm",
   "category_name": "CRM",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Salesforce: the free Developer Edition sign-up on developer.salesforce.com and the Trailblazer sign-in behind the Starter Suite trial are refused by Akamai (403, no challenge), and the Enterprise trial form requires a phone number. The docs are agent-friendly on docs.salesforce.com (llms.txt, markdown pages) and there is an official hosted MCP server and a rich sf CLI, but all of it needs an org we could not create, so no capability was driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ],
     "docs": "gaps"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "part",
     "text": "Gets in 1 of 3 drives",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Akamai (developer.salesforce.com edge)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": {
    "rule": "star",
    "step": null,
    "seen": "2026-10-16",
    "held": false
   },
   "same_level_drives": 1,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Akamai refuses sign-up pages; trial needs phone",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "gaps",
   "monitored": false,
   "url": "https://agentdrives.com/tools/salesforce?via=api",
   "json": "https://agentdrives.com/api/tools/salesforce.json?via=api"
  },
  {
   "slug": "savvycal",
   "name": "SavvyCal",
   "domain": "savvycal.com",
   "icon": "/logos/savvycal.png",
   "category": "scheduling",
   "category_name": "Scheduling",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "SavvyCal documents a REST API, but an agent cannot get in: the sign-up form shows a visible hCaptcha puzzle. Without an account there is no token, so no core capability could be driven; billing, cancel and delete are web-only.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 30,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "no",
     "text": "No llms.txt, OpenAPI or MCP server",
     "have": []
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "hCaptcha (image puzzle)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "hCaptcha puzzle on the sign-up form",
   "coverage_core": null,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/savvycal?via=api",
   "json": "https://agentdrives.com/api/tools/savvycal.json?via=api"
  },
  {
   "slug": "scrapingbee",
   "name": "ScrapingBee",
   "domain": "scrapingbee.com",
   "icon": "/logos/scrapingbee.png",
   "category": "web-scraping",
   "category_name": "Web scraping",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "ScrapingBee's only sign-up is a web form with a visible reCAPTCHA v2 checkbox, so an agent cannot get an account or API key alone. Docs (llms.txt), an official remote MCP server (18 tools, the 25 Nov 2025 MCP spec) and a CLI are agent-friendly once a human hands over a key. No OpenAPI and no agent payment rail.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "Google reCAPTCHA v2 checkbox",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [
    "mcp-payment"
   ],
   "paid": false,
   "first_blocker": "reCAPTCHA checkbox on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/scrapingbee?via=api",
   "json": "https://agentdrives.com/api/tools/scrapingbee.json?via=api"
  },
  {
   "slug": "sendgrid",
   "name": "SendGrid",
   "domain": "sendgrid.com",
   "icon": "/logos/sendgrid.png",
   "category": "email-infrastructure",
   "category_name": "Email infrastructure",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent can read all of SendGrid's docs headless (llms.txt, Markdown pages, OpenAPI 3.1.0, a docs-only MCP server) but cannot get an account: the Twilio sign-up form shows a Cloudflare Turnstile check to take it. Without an account no API key exists, so no capability could be driven; paying is card-in-console and deleting the account goes through Support.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an OpenAPI",
     "have": [
      "llms_txt",
      "openapi"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/8",
   "blocks_agent": "Cloudflare Turnstile (on Auth0 universal login, login.twilio.com)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "docs",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/sendgrid?via=api",
   "json": "https://agentdrives.com/api/tools/sendgrid.json?via=api"
  },
  {
   "slug": "serpapi",
   "name": "SerpApi",
   "domain": "serpapi.com",
   "icon": "/logos/serpapi.png",
   "category": "search-apis",
   "category_name": "Search APIs",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "SerpApi has agent-friendly docs (llms.txt, Markdown pages) and a current, stateless MCP server, but an agent cannot get an account: the sign-up form shows a reCAPTCHA picture puzzle and there is no API sign-up. Without a key no search works, and robots.txt also disallows the documented /search endpoint. Only the keyless parts worked: locations lookup and the MCP engine schemas.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": "private",
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/7",
   "blocks_agent": "Google reCAPTCHA v2",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA picture puzzle on sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/serpapi?via=api",
   "json": "https://agentdrives.com/api/tools/serpapi.json?via=api"
  },
  {
   "slug": "slack",
   "name": "Slack",
   "domain": "slack.com",
   "icon": "/logos/slack.png",
   "category": "team-chat",
   "category_name": "Team chat",
   "tested_at": "2026-10-16",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Slack on its own: the email sign-up and the Developer Program join form both show a visible reCAPTCHA 'I'm not a robot' checkbox to tick it, so no account, token or core task was reached. What an agent can do without an account is read excellent developer docs (llms.txt, Markdown on every page), the Swagger 2.0 Web API spec and the official MCP server's OAuth metadata, which needs a pre-registered Slack app.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 3,
      "value": "2.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "portal"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ],
     "docs": "gaps"
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "portal",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "reported",
   "core": null,
   "blocks_agent": "reCAPTCHA Enterprise (checkbox)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA checkbox on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": "gaps",
   "monitored": false,
   "url": "https://agentdrives.com/tools/slack?via=api",
   "json": "https://agentdrives.com/api/tools/slack.json?via=api"
  },
  {
   "slug": "squarespace",
   "name": "Squarespace",
   "domain": "squarespace.com",
   "icon": "/logos/squarespace.png",
   "category": "website-builders",
   "category_name": "Website builders",
   "tested_at": "2026-10-11",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot create a Squarespace account: the web-only sign-up, guarded by invisible reCAPTCHA Enterprise, returned a 401 'username or password is incorrect' and showed nothing. Without an account, only the official no-auth MCP server (domain search and name ideas) and the Markdown developer docs work. Sites, store, invoices, scheduling and campaigns are behind sign-in and mostly web-UI-only.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 65,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Google reCAPTCHA Enterprise (invisible)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [
    "stripe-projects",
    "mcp-payment"
   ],
   "paid": false,
   "first_blocker": "Sign-up silently rejected behind invisible reCAPTCHA",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/squarespace?via=api",
   "json": "https://agentdrives.com/api/tools/squarespace.json?via=api"
  },
  {
   "slug": "taskade",
   "name": "Taskade",
   "domain": "taskade.com",
   "icon": "/logos/taskade.png",
   "category": "task-management",
   "category_name": "Task management",
   "tested_at": "2026-10-08",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Taskade on its own: the only sign-up is a web form with a visible Cloudflare Turnstile widget to do it. Even with an account, robots.txt disallows /api/, the base of both documented APIs, and the hosted MCP is for paid workspaces only. The docs themselves are very agent-friendly: llms.txt indexes and a Markdown copy of every page.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/taskade?via=api",
   "json": "https://agentdrives.com/api/tools/taskade.json?via=api"
  },
  {
   "slug": "tawk",
   "name": "tawk.to",
   "domain": "tawk.to",
   "icon": "/logos/tawk.png",
   "category": "customer-support",
   "category_name": "Customer support",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent can read tawk.to's docs (llms.txt, developer portal, help center), but the only sign-up route is a web form behind Cloudflare Turnstile. It rejected our agent's browser, so no capability could be tried. Even with an account, the REST API needs a human-approved access request, and there is no OpenAPI, no official MCP server and no machine payment rail.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 55,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/8",
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "third-party",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/tawk?via=api",
   "json": "https://agentdrives.com/api/tools/tawk.json?via=api"
  },
  {
   "slug": "teamwork",
   "name": "Teamwork.com",
   "domain": "teamwork.com",
   "icon": "/logos/teamwork.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Teamwork.com has an official MCP server that speaks MCP (the 28 Jul 2026 spec), OAuth metadata and a 429-operation Swagger spec, but an agent cannot get in: the sign-up form requires a phone number and there is no headless sign-up or credential path. No capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "current",
      "behind": null,
      "value": "2026-07-28"
     },
     {
      "standard": "MCP discovery",
      "state": "current",
      "behind": null,
      "value": "ok"
     },
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 3,
      "value": "2.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": "reCAPTCHA (invisible)",
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Phone number required at sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/teamwork?via=api",
   "json": "https://agentdrives.com/api/tools/teamwork.json?via=api"
  },
  {
   "slug": "todoist",
   "name": "Todoist",
   "domain": "todoist.com",
   "icon": "/logos/todoist.png",
   "category": "task-management",
   "category_name": "Task management",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Todoist has a strong agent surface on paper: an OpenAPI 3.1.0 REST API, an official OAuth MCP server with PRM and CIMD/DCR, a CLI and SDK. But an agent cannot get in on its own: the email sign-up form runs an invisible Cloudflare Turnstile that rejected our agent's browser to complete it, so no account, token or capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 80,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an OpenAPI and an MCP server",
     "have": [
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Cloudflare Turnstile (invisible)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 4,
   "drives": 4,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Invisible Cloudflare Turnstile on sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/todoist?via=api",
   "json": "https://agentdrives.com/api/tools/todoist.json?via=api"
  },
  {
   "slug": "trello",
   "name": "Trello",
   "domain": "trello.com",
   "icon": "/logos/trello.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Trello has a full REST API (OpenAPI 3.0.0, 261 operations) and an official remote MCP server with current OAuth discovery (PRM, CIMD), but both need a signed-in Atlassian account. The Atlassian sign-up form showed our agent's browser a visible reCAPTCHA, so no capability could be driven. Paying is credit card in the web UI only.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 70,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an OpenAPI and an MCP server",
     "have": [
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "reCAPTCHA Enterprise (Atlassian sign-up)",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Visible reCAPTCHA on Atlassian sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/trello?via=api",
   "json": "https://agentdrives.com/api/tools/trello.json?via=api"
  },
  {
   "slug": "turso",
   "name": "Turso",
   "domain": "turso.tech",
   "icon": "/logos/turso.png",
   "category": "databases",
   "category_name": "Databases",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Turso's docs are very agent-friendly (llms.txt, Markdown pages, OpenAPI, a hosted OAuth MCP server with CIMD), and its embedded engine runs locally through the official SDK with no account: SQL, vectors, FTS and CDC all worked. The cloud product stopped at sign-up: the only route is a Clerk web form that shows a visible Cloudflare Turnstile on submit, so no account, token or cloud database was made.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.1"
     },
     {
      "standard": "A2A",
      "state": "behind",
      "behind": 1,
      "value": "0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "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": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "2/9",
   "blocks_agent": "Cloudflare Turnstile (via Clerk bot protection)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P3",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/turso?via=api",
   "json": "https://agentdrives.com/api/tools/turso.json?via=api"
  },
  {
   "slug": "typeform",
   "name": "Typeform",
   "domain": "typeform.com",
   "icon": "/logos/typeform.png",
   "category": "forms",
   "category_name": "Forms",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Typeform has a documented REST API and an official MCP server with proper OAuth discovery (PRM, CIMD, DCR), but an agent cannot get an account: our agent's browser sign-up was silently denied by Typeform's registration inline hook (E0000135) with a misleading 'you might already have an account' message. Without an account there is no token, so no form, response or analytics capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Google reCAPTCHA (invisible) on the Okta sign-up form, plus Typeform's registration inline hook",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Sign-up denied by registration hook, no reason",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/typeform?via=api",
   "json": "https://agentdrives.com/api/tools/typeform.json?via=api"
  },
  {
   "slug": "typefully",
   "name": "Typefully",
   "domain": "typefully.com",
   "icon": "/logos/typefully.png",
   "category": "social-media-scheduling",
   "category_name": "Social media scheduling",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Typefully has an agent-ready surface: an OpenAPI 3.1.0 REST API, an official MCP server with OAuth (CIMD) or API-key auth, llms.txt and Markdown docs, and API and MCP on the free plan. An agent cannot get in on its own: email sign-up shows an interactive Cloudflare Turnstile, and keys and tokens need the web settings or a browser consent page. So nothing was driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "current",
      "behind": null,
      "value": "cimd"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 1,
      "value": "3.1.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/8",
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P2",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on email sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/typefully?via=api",
   "json": "https://agentdrives.com/api/tools/typefully.json?via=api"
  },
  {
   "slug": "wix",
   "name": "Wix",
   "domain": "wix.com",
   "icon": "/logos/wix.png",
   "category": "website-builders",
   "category_name": "Website builders",
   "tested_at": "2026-10-12",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Wix documents a broad REST API, SDK, CLI and an official MCP server, with markdown docs for agents. An agent cannot open an account on its own: the sign-up form shows a reCAPTCHA Enterprise checkbox to our agent's browser, and every route to a key or token needs an account. Nothing past the docs could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 75,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "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": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt and an MCP server",
     "have": [
      "llms_txt",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "reCAPTCHA Enterprise",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P3",
   "pays_with": [
    "stripe-projects"
   ],
   "paid": false,
   "first_blocker": "reCAPTCHA checkbox on the sign-up form",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/wix?via=api",
   "json": "https://agentdrives.com/api/tools/wix.json?via=api"
  },
  {
   "slug": "wrike",
   "name": "Wrike",
   "domain": "wrike.com",
   "icon": "/logos/wrike.png",
   "category": "project-management",
   "category_name": "Project management",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Wrike's docs are agent-ready: llms.txt, Markdown pages, an api-catalog with OpenAPI 3.0.1, and an official MCP server with Protected Resource Metadata. An agent cannot get an account, though: the free-trial registration endpoint sits behind a Cloudflare managed challenge. No API, MCP or product capability could be driven.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 90,
    "security": null,
    "standards": [
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.1"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": "Cloudflare managed challenge (cf-mitigated: challenge) on reg.wrike.com",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare challenge on the sign-up endpoint",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/wrike?via=api",
   "json": "https://agentdrives.com/api/tools/wrike.json?via=api"
  },
  {
   "slug": "xero",
   "name": "Xero",
   "domain": "xero.com",
   "icon": "/logos/xero.png",
   "category": "invoicing",
   "category_name": "Invoicing",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Xero stops an agent at sign-up: both the free trial and the free developer login require a phone number, so no account, credentials or capability could be reached. The developer surface is strong (official MCP server with 51 tools, CLI, OpenAPI 3.0.0, Demo Company), but every route needs an OAuth client from a logged-in account, and the MCP server is stdio-only on the the older 25 Nov 2025 spec protocol.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 80,
    "security": null,
    "standards": [
     {
      "standard": "MCP",
      "state": "behind",
      "behind": 1,
      "value": "2025-11-25"
     },
     {
      "standard": "MCP discovery",
      "state": "behind",
      "behind": null,
      "value": "legacy"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.0"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: an OpenAPI and an MCP server",
     "have": [
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/9",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Phone number required at sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/xero?via=api",
   "json": "https://agentdrives.com/api/tools/xero.json?via=api"
  },
  {
   "slug": "zendesk",
   "name": "Zendesk",
   "domain": "zendesk.com",
   "icon": "/logos/zendesk.png",
   "category": "customer-support",
   "category_name": "Customer support",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 1,
   "level_name": "Needs a person",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Zendesk's free 14-day trial needs no card, but its sign-up form requires a phone number, so an agent cannot create an account; the only API route to create accounts is reseller-only. Discovery is decent: OpenAPI 3.0.3 and an official per-account MCP server with a server card and RFC 9728 metadata, on legacy MCP (the 18 Jun 2025 spec) with DCR-only OAuth.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 100,
    "security": null,
    "standards": [
     {
      "standard": "MCP client registration",
      "state": "behind",
      "behind": null,
      "value": "dcr"
     },
     {
      "standard": "OpenAPI",
      "state": "behind",
      "behind": 2,
      "value": "3.0.3"
     }
    ]
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "yes",
     "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
     "have": [
      "llms_txt",
      "openapi",
      "mcp"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "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",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": null,
   "wall_type": null,
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 3,
   "drives": 3,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Phone number required on trial sign-up",
   "coverage_core": null,
   "mcp": "official",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/zendesk?via=api",
   "json": "https://agentdrives.com/api/tools/zendesk.json?via=api"
  },
  {
   "slug": "carrd",
   "name": "Carrd",
   "domain": "carrd.com",
   "icon": "/logos/carrd.png",
   "category": "website-builders",
   "category_name": "Website builders",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 0,
   "level_name": "Read-only",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "Carrd has no API, CLI or MCP: everything runs in the web builder. A browser agent can build a site and sign up inline from the Publish panel (the /signup page is behind a Cloudflare challenge). Email verification then shows a reCAPTCHA picture challenge, so the site never went live and the no-card trial stayed locked. The site and the account were deleted in the browser.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 30,
    "security": "private",
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "verify"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "left": "stuck"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "no",
     "text": "No llms.txt, OpenAPI or MCP server",
     "have": []
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "verify",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "left": "stuck",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "person",
     "label": "A person sets it up",
     "routes": [],
     "minutes": null,
     "core": null
    }
   ],
   "minutes": null,
   "next": {
    "to": null,
    "text": "No API, CLI or MCP to drive it with"
   },
   "stop": "verify",
   "coverage_source": "computed",
   "core": "2/6",
   "blocks_agent": "Google reCAPTCHA v2 picture challenge",
   "wall_type": "challenge",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "reCAPTCHA picture challenge on email verification",
   "coverage_core": null,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/carrd?via=api",
   "json": "https://agentdrives.com/api/tools/carrd.json?via=api"
  },
  {
   "slug": "later",
   "name": "Later",
   "domain": "later.com",
   "icon": "/logos/later.png",
   "category": "social-media-scheduling",
   "category_name": "Social media scheduling",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 0,
   "level_name": "Read-only",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "An agent cannot get into Later Social: app.later.com, which serves sign-up, log-in and checkout, shows our signed agent a Cloudflare Turnstile check. Later Social has no public API, CLI or MCP server; the only Later API is the sales-gated Influence Reporting API.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 30,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "no",
     "text": "No llms.txt, OpenAPI or MCP server",
     "have": []
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "person",
     "label": "A person sets it up",
     "routes": [],
     "minutes": null,
     "core": null
    }
   ],
   "minutes": null,
   "next": {
    "to": null,
    "text": "No API, CLI or MCP to drive it with"
   },
   "stop": "signup",
   "coverage_source": "computed",
   "core": "0/10",
   "blocks_agent": "Cloudflare Turnstile (managed challenge)",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 2,
   "drives": 2,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up page",
   "coverage_core": null,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/later?via=api",
   "json": "https://agentdrives.com/api/tools/later.json?via=api"
  },
  {
   "slug": "zcal",
   "name": "zcal",
   "domain": "zcal.co",
   "icon": "/logos/zcal.png",
   "category": "scheduling",
   "category_name": "Scheduling",
   "tested_at": "2026-10-06",
   "draft": false,
   "origin": "editorial",
   "stale": false,
   "level": 0,
   "level_name": "Read-only",
   "level_selfhost": null,
   "entry": "closed",
   "badges": [],
   "summary": "zcal has no public API, CLI or MCP server; everything happens in its web app. Sign-up shows a Cloudflare Turnstile that rejected our agent's browser, so an agent could not get an account. Its help docs are agent-friendly: llms.txt and Markdown pages.",
   "parts": {
    "holds_up": null,
    "docs_match": null,
    "setup": 50,
    "security": null,
    "standards": []
   },
   "stages": [
    {
     "key": "in",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup"
    },
    {
     "key": "work",
     "label": "Use",
     "state": "unreached",
     "text": "Work not measured"
    },
    {
     "key": "pay",
     "label": "Pay",
     "state": "unreached",
     "text": "Payment not reached",
     "value": "unreached",
     "route": "card_checkout"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account"
    }
   ],
   "outcomes": [
    {
     "key": "find",
     "label": "Find",
     "state": "part",
     "text": "Some docs agents can read: llms.txt",
     "have": [
      "llms_txt"
     ]
    },
    {
     "key": "access",
     "label": "Access",
     "state": "no",
     "text": "Can't get in on its own",
     "at": "signup",
     "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": "card_checkout",
     "stage": "pay"
    },
    {
     "key": "leave",
     "label": "Leave",
     "state": "unreached",
     "text": "Leaving not reached",
     "how": "no-account",
     "stage": "leave"
    }
   ],
   "access": [
    {
     "key": "person",
     "label": "A person sets it up",
     "routes": [],
     "minutes": null,
     "core": null
    }
   ],
   "minutes": null,
   "next": {
    "to": null,
    "text": "No API, CLI or MCP to drive it with"
   },
   "stop": "signup",
   "coverage_source": "computed",
   "core": "0/7",
   "blocks_agent": "Cloudflare Turnstile",
   "wall_type": "network",
   "lets_agent": null,
   "freshness": "fresh",
   "robots": null,
   "same_level_drives": 1,
   "drives": 1,
   "pay": "P1",
   "pays_with": [],
   "paid": false,
   "first_blocker": "Cloudflare Turnstile on the sign-up form",
   "coverage_core": null,
   "mcp": "none",
   "ways_in": [],
   "docs_overall": null,
   "monitored": false,
   "url": "https://agentdrives.com/tools/zcal?via=api",
   "json": "https://agentdrives.com/api/tools/zcal.json?via=api"
  }
 ]
}