{
 "slug": "taskade",
 "name": "Taskade",
 "url": "https://taskade.com",
 "domain": "taskade.com",
 "category": "task-management",
 "category_name": "Task management",
 "tested_at": "2026-10-08",
 "run": "20261008T193347Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261008T193347Z",
   "date": "2026-10-08",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "obey"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 1,
  "self_start": false
 },
 "badges": [],
 "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",
 "core": "0/9",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 90,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 90,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "behind",
    "behind": null,
    "value": "dcr"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "0f43284d4a47",
  "kb_version": "2+overlay-221e34fe11",
  "identity": "2091d36f31f1"
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "obey"
 },
 "same_level_drives": 1,
 "drives": 1,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Cloudflare Turnstile",
  "visible": true,
  "type": "network",
  "human": null,
  "how": "Let verified bots and signed agents past the check on sign-up: in Cloudflare, add a WAF custom rule that skips the bot challenge on your sign-up paths for verified bots and for signed agents (rule field cf.bot_management.signed_agent; since 1 July 2026 signed agents count as verified bots), and render Turnstile only when the request is not from a verified agent.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "form"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt, /docs/llms.txt and every docs page as Markdown (.md URL and Accept: text/markdown). The OpenAPI specs sit under /api/, which robots.txt disallows, so they were not fetched."
  },
  "signup": {
   "status": "human",
   "note": "Web form only. A visible Cloudflare Turnstile 'Verify you are human' widget sits on the form."
  },
  "verify": {
   "status": "",
   "note": "Not reached: no account.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Personal access tokens are made only in the web UI (Settings > API). OAuth dynamic client registration works headless (POST /oauth2/register 201), but a token needs a signed-in user; no device flow. Also, the documented API base www.taskade.com/api/v1 and /api/v2 is disallowed by robots.txt (Disallow: /api/).",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "Not reached: no account; the REST/Action API base is robots-disallowed, and the hosted MCP needs a paid workspace.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Generating an app at /create without an account redirects to /signup.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P2",
   "rails": [
    "Stripe billing portal (hosted card checkout)"
   ],
   "rail_ids": [
    "stripe-portal"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "No 402 anywhere, no MPP, Stripe Projects or Bazaar listing, no billing API or MCP billing tool in the docs. Upgrades go through Settings > Billing > 'Manage / Update Plan' to the billing portal (docs). We paid nothing: pay_tx.json 'no 402 on the product's own domain asks for USDC on a network we hold a wallet for'. Not reached in the app: no account.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "not tested: no plan or trial was started. Docs: Settings > Billing > Cancel subscription, two retention screens ('Before you go...', 'Before you cancel, one option'), then the Stripe page; web only.",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account to delete. Docs: Account settings, type the email, click Delete Account twice; web only, no API route.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-08",
  "source": "probe",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": false,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST v1 (~70 ops) and Action API v2 (beta), both under www.taskade.com/api/, which robots.txt disallows for every user agent",
  "openapi": "published at /api/documentation/v1/json and v2/json; not fetched (robots.txt)",
  "mcp": "official hosted MCP at /mcp (beta, paid plans), plus local @taskade/mcp-server on npm",
  "llms_txt": "/llms.txt, /docs/llms.txt, /learn/llms.txt; every docs page has a .md copy",
  "webhooks": "automation webhook triggers and signed outbound webhooks, Pro and above"
 },
 "can_do": [
  "Read all developer and help docs as Markdown, headless",
  "Discover the hosted MCP's OAuth metadata (RFC 9728 PRM and RFC 8414 AS metadata)",
  "Register an OAuth client headless through dynamic client registration"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "Cloudflare Turnstile 'Verify you are human' widget on the sign-up form; no API or CLI sign-up"
  },
  {
   "what": "Call the REST or Action API",
   "why": "robots.txt disallows /api/, the documented base of both APIs; and no account"
  },
  {
   "what": "Get a personal access token without a browser",
   "why": "tokens are made only in Settings > API; no device flow"
  },
  {
   "what": "Use the hosted MCP on the free plan",
   "why": "docs: paid workspaces only (Starter and above)"
  },
  {
   "what": "Generate an app from a prompt",
   "why": "/create redirects to /signup without an account"
  }
 ],
 "blockers": [
  "Cloudflare Turnstile on sign-up",
  "robots.txt Disallow: /api/ covers the documented API base"
 ],
 "tips_for_owner": [
  "Let verified signed agents pass sign-up",
  "Allow /api/ in robots.txt for agents",
  "Mint API tokens without a browser",
  "Open hosted MCP to Free workspaces",
  "Accept an agent payment rail"
 ],
 "tips_for_agents": [
  "Read docs as Markdown: append .md or send Accept: text/markdown; start at https://www.taskade.com/docs/llms.txt",
  "Sign-up needs a human (Turnstile); after that, a human must create the personal access token in Settings > API",
  "The API base is under /api/, which robots.txt disallows: a robots-respecting agent cannot use it",
  "Hosted MCP (https://www.taskade.com/mcp) takes OAuth with DCR or a personal token, paid workspaces only"
 ],
 "selfhost": null,
 "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.",
 "wall": "Cloudflare Turnstile on the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Taskade is an AI workspace where you build apps, agents and automations from plain-language prompts. The agent could not even sign up on its own: the sign-up form has a visible 'prove you're human' check. Everything past that point (using the API, building an app, paying) was unreachable.",
  "can_do": [
   "Read all the help and developer documentation on its own",
   "Register itself as an OAuth app (but still can't get a usable login token without a person)"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "a visible human-verification puzzle on the sign-up page"
   },
   {
    "what": "Call Taskade's API",
    "why": "the site's own crawling rules block that part of the site for all automated visitors"
   },
   {
    "what": "Build an app from a prompt",
    "why": "it immediately asks you to sign up first"
   },
   {
    "what": "Use the AI-agent connector (MCP)",
    "why": "only offered on paid plans, which need an account the agent could not create"
   },
   {
    "what": "Pay for a plan",
    "why": "upgrading only happens through a web checkout page, which needs an account"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Inbound webhook trigger",
   "plan": "Pro",
   "evidence": "docs/guides/webhooks: 'Webhook triggers run on Pro and above. On Free and Starter, a call returns 402'"
  },
  {
   "capability": "Outbound webhook registration",
   "plan": "Pro",
   "evidence": "docs/guides/webhooks: 'the Webhook Registration API return 402 on Free and Starter'"
  },
  {
   "capability": "Custom domain",
   "plan": "Business",
   "evidence": "llms.txt: 'Custom domains are Business+.'"
  },
  {
   "capability": "Multi-agent team",
   "plan": "paid",
   "evidence": "capability map plan: paid"
  },
  {
   "capability": "App users",
   "plan": "paid",
   "evidence": "capability map plan: paid"
  },
  {
   "capability": "SSO/SCIM",
   "plan": "paid",
   "evidence": "capability map plan: paid"
  },
  {
   "capability": "Hosted MCP (channel)",
   "plan": "Starter and above",
   "evidence": "docs/mcp/hosted-mcp: 'The workspace must be on a paid plan (Starter and above)... A Free workspace does not show in list_spaces.'"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Genesis App Building",
   "capability": "Generate a working app from a plain-language prompt",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Create (/create) and Taskade EVE"
   },
   "check": "GET /api/v1/me/projects shows the newly created project(s)/app backing the generated app",
   "source": "https://www.taskade.com/ (hero), https://www.taskade.com/llms.txt (Build: Describe an app in plain language)"
  },
  {
   "id": "cap-02",
   "group": "Projects",
   "capability": "Create a project (structured workspace data)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects",
    "mcp": "createProject",
    "cli": null,
    "ui": "Workspace sidebar \"New Project\""
   },
   "check": "GET /projects/{projectId} returns the created project",
   "source": "https://www.taskade.com/api/documentation/v1/json, https://www.taskade.com/docs/rest"
  },
  {
   "id": "cap-03",
   "group": "Projects",
   "capability": "Create, update and complete tasks within a project",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/{projectId}/tasks/, PUT /projects/{projectId}/tasks/{taskId}, POST .../complete",
    "mcp": "createTask, completeTask",
    "cli": null,
    "ui": "Project List/Board/Table view"
   },
   "check": "GET /projects/{projectId}/tasks/{taskId} shows updated content and completed:true after completing",
   "source": "https://www.taskade.com/api/documentation/v1/json"
  },
  {
   "id": "cap-05",
   "group": "AI Agents",
   "capability": "Create a custom AI agent with instructions, knowledge and tools",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /folders/{folderId}/agents",
    "mcp": "createAgent",
    "cli": null,
    "ui": "Agents tab > New Agent"
   },
   "check": "GET /agents/{agentId} returns agent with configured instructions/knowledge",
   "source": "https://www.taskade.com/api/documentation/v1/json, https://www.taskade.com/learn/agents"
  },
  {
   "id": "cap-06",
   "group": "AI Agents",
   "capability": "Add knowledge to an agent (files, projects, web pages, YouTube)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /agents/{agentId}/knowledge/media, POST /agents/{agentId}/knowledge/project",
    "mcp": "addKnowledgeMedia, addKnowledgeProject",
    "cli": null,
    "ui": "Agent settings > Knowledge"
   },
   "check": "GET /agents/{agentId} knowledge list includes the added media/project id",
   "source": "https://www.taskade.com/api/documentation/v1/json, https://www.taskade.com/llms.txt (Custom AI agents)"
  },
  {
   "id": "cap-07",
   "group": "AI Agents",
   "capability": "Chat with an agent and read conversation history",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "promptAgent, getConversation, listConversations",
    "cli": null,
    "ui": "Agent chat panel"
   },
   "check": "GET /agents/{agentId}/convos/{convoId} returns the exchanged messages",
   "source": "https://www.taskade.com/api/documentation/v2/json, https://www.taskade.com/api/documentation/v1/json"
  },
  {
   "id": "cap-08",
   "group": "AI Agents",
   "capability": "Run a multi-agent team on a shared task with human oversight",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Agent teams / Autonomous Agents"
   },
   "check": "UI: agent team run log shows role-tagged steps and an interrupt point the user can act on",
   "source": "https://www.taskade.com/llms.txt (Agent teams; Autonomous Agents guide), https://www.taskade.com/docs/guides/autonomous-agents"
  },
  {
   "id": "cap-09",
   "group": "Automation",
   "capability": "Build a scheduled or event-driven automation workflow with branches/loops/filters",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Automation visual builder"
   },
   "check": "UI: automation run history shows a completed run with branch/loop steps executed",
   "source": "https://www.taskade.com/llms.txt (Automate; How do Taskade Automations work FAQ), https://www.taskade.com/learn/automation"
  },
  {
   "id": "cap-12",
   "group": "Automation",
   "capability": "Connect to 100+ third-party integrations (Gmail, Slack, HubSpot, Stripe, Sheets, etc.)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Automation step picker / Integrations directory"
   },
   "check": "UI: configured integration step shows an authenticated connection and executes successfully in a run",
   "source": "https://www.taskade.com/integrations, https://www.taskade.com/llms.txt (Integrations)"
  },
  {
   "id": "cap-13",
   "group": "Genesis App Publishing",
   "capability": "Publish an app or agent by URL or embed",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "enablePublicAgentAccess (agent)",
    "cli": null,
    "ui": "Genesis app > Publish"
   },
   "check": "GET /public-agents/{publicAgentId} (or published app URL) is reachable without auth",
   "source": "https://www.taskade.com/api/documentation/v1/json, https://www.taskade.com/llms.txt (Publish)"
  },
  {
   "id": "cap-04",
   "group": "Projects",
   "capability": "Switch project view (List, Board, Table, Mind Map, Docs, Gantt, Calendar, Actionsheet, Org Chart)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project view switcher toolbar"
   },
   "check": "UI: selecting a view re-renders same task data in that layout (no API state change)",
   "source": "https://www.taskade.com/llms.txt (Project views section; Gantt/Actionsheet/Org Chart paid-only)"
  },
  {
   "id": "cap-10",
   "group": "Automation",
   "capability": "Trigger an automation from an inbound webhook",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Automation trigger > Webhook"
   },
   "check": "POSTing to the generated webhook URL creates a new automation run visible in run history",
   "source": "https://www.taskade.com/llms.txt (Automation webhooks are Pro+), https://www.taskade.com/docs/guides/webhooks"
  },
  {
   "id": "cap-11",
   "group": "Automation",
   "capability": "Register an outbound signed webhook subscription",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /webhooks (subscribe), GET /webhooks, DELETE /webhooks/{id}",
    "mcp": "subscribeWebhook, unsubscribeWebhook",
    "cli": null,
    "ui": "Developer settings > Webhooks"
   },
   "check": "GET /webhooks lists the subscription with its target URL and event type",
   "source": "https://www.taskade.com/api/documentation/v2/json, https://www.taskade.com/docs/guides/webhooks"
  },
  {
   "id": "cap-14",
   "group": "Genesis App Publishing",
   "capability": "Password-protect a published app or project share link",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /projects/{projectId}/shareLink, GET /projects/{projectId}/shareLink",
    "mcp": "enableShareLink, getShareLink",
    "cli": null,
    "ui": "Share settings"
   },
   "check": "GET /projects/{projectId}/shareLink shows password-protection flag enabled",
   "source": "https://www.taskade.com/api/documentation/v1/json, https://www.taskade.com/llms.txt (Share a workspace, project with password protection)"
  },
  {
   "id": "cap-16",
   "group": "Genesis App Identity",
   "capability": "Enable built-in email sign-in and manage app end users",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Genesis app > App Users (beta)"
   },
   "check": "UI: App Users list shows an invited user and allows suspend/remove",
   "source": "https://www.taskade.com/llms.txt (Identity: App identity, App Users beta)"
  },
  {
   "id": "cap-17",
   "group": "Genesis App Customization",
   "capability": "Edit app source files, theme, colors, fonts and secrets",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Genesis app editor"
   },
   "check": "UI: preview reflects the edited theme/source, and version history lists the save as a new version",
   "source": "https://www.taskade.com/llms.txt (Customize; App customization)"
  },
  {
   "id": "cap-18",
   "group": "Genesis App Customization",
   "capability": "Restore an earlier version via version history",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/{projectId}/restore",
    "mcp": "restoreProject",
    "cli": null,
    "ui": "Version history panel"
   },
   "check": "GET /projects/{projectId} content matches the restored version's prior state",
   "source": "https://www.taskade.com/api/documentation/v1/json"
  },
  {
   "id": "cap-19",
   "group": "Distribution",
   "capability": "Publish a project/app as a community template",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project settings > Publish as template"
   },
   "check": "The template appears listed at taskade.com/templates or taskade.com/apps under the creator",
   "source": "https://www.taskade.com/templates, https://www.taskade.com/apps, https://www.taskade.com/llms.txt (Distribute)"
  },
  {
   "id": "cap-20",
   "group": "Distribution",
   "capability": "Package and import/export App Kits (.tsk bundles) of projects, agents, automations and UI",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /bundles/{spaceId}/export, GET /bundles/{spaceId}/export/zip, POST /bundles/{workspaceId}/import, POST /bundles/{workspaceId}/import/zip",
    "mcp": "exportBundle, importBundle, importBundleZip",
    "cli": null,
    "ui": "Kits library / workspace Export-Import"
   },
   "check": "Re-importing the exported bundle recreates matching projects/agents/automations, verifiable via GET /me/projects",
   "source": "https://www.taskade.com/api/documentation/v1/json, https://www.taskade.com/docs/guides/bundles"
  },
  {
   "id": "cap-21",
   "group": "Collaboration",
   "capability": "Collaborate in real time with comments and mentions",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project task comments/chat"
   },
   "check": "UI: a posted comment with @mention appears for the other collaborator in real time",
   "source": "https://www.taskade.com/llms.txt (Collaborate), https://www.taskade.com/learn/projects"
  },
  {
   "id": "cap-22",
   "group": "Collaboration",
   "capability": "Assign tasks to members and set due dates",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /projects/{projectId}/tasks/{taskId}/assignees, PUT .../date",
    "mcp": "assignTask, unassignTask, setTaskDate",
    "cli": null,
    "ui": "Task detail panel"
   },
   "check": "GET /projects/{projectId}/tasks/{taskId}/assignees and .../date reflect the set values",
   "source": "https://www.taskade.com/api/documentation/v1/json"
  },
  {
   "id": "cap-23",
   "group": "Collaboration",
   "capability": "Manage member roles from Owner to Viewer",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /projects/{projectId}/members",
    "mcp": "listProjectMembers",
    "cli": null,
    "ui": "Project/workspace member settings"
   },
   "check": "GET /projects/{projectId}/members shows the member with the assigned role",
   "source": "https://www.taskade.com/api/documentation/v1/json, https://www.taskade.com/llms.txt (role-based access from Owner to Viewer)"
  },
  {
   "id": "cap-24",
   "group": "Custom Fields",
   "capability": "Add and set custom fields on tasks",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /projects/{projectId}/fields, PUT /projects/{projectId}/tasks/{taskId}/fields/{fieldId}, DELETE .../fields/{fieldId}",
    "mcp": "listFields, setTaskFieldValue, deleteTaskFieldValue",
    "cli": null,
    "ui": "Table view column / task detail"
   },
   "check": "GET /projects/{projectId}/tasks/{taskId}/fields/{fieldId} returns the set value",
   "source": "https://www.taskade.com/api/documentation/v1/json, https://www.taskade.com/llms.txt (Add custom fields)"
  },
  {
   "id": "cap-25",
   "group": "Files & Media",
   "capability": "Upload and attach media/files to a workspace or agent",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /medias/spaces/{spaceId}/upload, GET /medias/{mediaId}/download",
    "mcp": "listMedia, getMedia, deleteMedia",
    "cli": null,
    "ui": "File upload in project/agent"
   },
   "check": "GET /medias/{mediaId} returns the uploaded file metadata and GET .../download retrieves bytes",
   "source": "https://www.taskade.com/api/documentation/v1/json"
  },
  {
   "id": "cap-26",
   "group": "Project Templates",
   "capability": "Create a project from a template or AI generator",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/from-template, GET /folders/{folderId}/project-templates",
    "mcp": "createProjectFromTemplate, listTemplates",
    "cli": null,
    "ui": "Templates library, /generate"
   },
   "check": "GET /projects/{projectId} for the new project matches the template's structure",
   "source": "https://www.taskade.com/api/documentation/v1/json, https://www.taskade.com/generate"
  },
  {
   "id": "cap-27",
   "group": "Import",
   "capability": "Import data from other tools (Notion, Trello, Asana, Monday, ClickUp, Todoist, Obsidian, etc.)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Workspace > Import"
   },
   "check": "Imported items appear as new tasks/projects in GET /me/projects after the import completes",
   "source": "https://www.taskade.com/learn/import, https://www.taskade.com/llms.txt (Import)"
  },
  {
   "id": "cap-29",
   "group": "Developer Platform",
   "capability": "Run a local workspace MCP server for task-level writes",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "github.com/taskade/mcp (local server)",
    "cli": "npx/clone taskade/mcp",
    "ui": null
   },
   "check": "Local server's tools/list exposes create/complete/assignee/date/note/field task tools backed by REST v1",
   "source": "https://www.taskade.com/docs/mcp/workspace-mcp, https://www.taskade.com/llms.txt (Workspace MCP)"
  },
  {
   "id": "cap-30",
   "group": "Developer Platform",
   "capability": "Call an external MCP server's tools from within an automation (MCP Client connector)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "MCP Client automation connector",
    "cli": null,
    "ui": "Automation step > MCP Client"
   },
   "check": "UI: automation run log shows the MCP Client step invoking the external tool and returning a result",
   "source": "https://www.taskade.com/llms.txt (MCP Direction and Availability)"
  },
  {
   "id": "cap-36",
   "group": "AI Models",
   "capability": "Select or auto-route between 15+ frontier AI models per agent/conversation",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Agent/chat model picker"
   },
   "check": "UI: selected model name is shown attached to subsequent responses in that conversation",
   "source": "https://www.taskade.com/docs/models, https://www.taskade.com/docs/models/custom-engine"
  },
  {
   "id": "cap-15",
   "group": "Genesis App Publishing",
   "capability": "Connect a custom domain to a published app",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Genesis app > Domain settings"
   },
   "check": "UI: DNS/domain settings panel shows the connected custom domain as verified",
   "source": "https://www.taskade.com/llms.txt (Custom domains are Business+), https://www.taskade.com/pricing"
  },
  {
   "id": "cap-31",
   "group": "Developer Platform",
   "capability": "Create and revoke a personal access token",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > API (/settings/api)"
   },
   "check": "A request using the token against GET /api/v1/me/projects succeeds; after revocation it returns 401",
   "source": "https://www.taskade.com/docs/getting-started/personal-tokens"
  },
  {
   "id": "cap-32",
   "group": "Account/Billing",
   "capability": "Upgrade/downgrade subscription plan and manage seats",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Pricing page / workspace billing settings"
   },
   "check": "UI: workspace plan badge updates to the new tier and seat count reflects added/removed members",
   "source": "https://www.taskade.com/pricing"
  },
  {
   "id": "cap-33",
   "group": "Account/Admin",
   "capability": "Configure SSO/SAML and SCIM user provisioning",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Workspace admin > Security"
   },
   "check": "UI: SSO configuration panel shows a connected identity provider and a successful test login",
   "source": "https://www.taskade.com/llms.txt (SSO/SAML on Business and higher, SCIM on Enterprise), https://www.taskade.com/security"
  },
  {
   "id": "cap-34",
   "group": "Account/Admin",
   "capability": "Create and organize unlimited workspaces and folders",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET /workspaces, GET /workspaces/{workspaceId}/folders, POST /workspaces/{workspaceId}/projects",
    "mcp": "listSpaces, listFolders",
    "cli": null,
    "ui": "Workspace switcher"
   },
   "check": "GET /workspaces lists the new workspace and its folders",
   "source": "https://www.taskade.com/api/documentation/v1/json, https://www.taskade.com/pricing (unlimited workspaces)"
  },
  {
   "id": "cap-35",
   "group": "Platform Access",
   "capability": "Use Taskade across web, desktop (Mac/Windows/Linux), mobile (iOS/Android), and browser extensions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Downloads page installers"
   },
   "check": "Workspace data edited on one client (e.g. web) appears synced on another (e.g. desktop app)",
   "source": "https://www.taskade.com/downloads, https://www.taskade.com/llms.txt (Cross-platform access)"
  }
 ],
 "attempts": [
  {
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "robots.txt",
   "task": "Read robots.txt and AI preferences",
   "result": "done",
   "evidence": "GET https://www.taskade.com/robots.txt 200: 'User-Agent: * ... Content-Signal: ai-train=yes, search=yes, ai-input=yes; Allow: /; Disallow: /api/; Disallow: /socket.io/; Disallow: /graphql'. Response header 'content-signal: ai-train=yes, search=yes, ai-input=yes'. No aipref Content-Usage line or header.",
   "notes": "Cloudflare Content Signals scheme (parses: lowercase terms, yes/no). Disallow: /api/ covers the documented REST v1 and Action v2 base URLs (https://www.taskade.com/api/v1, /api/v2) and the OpenAPI specs at /api/documentation/v1/json.",
   "t": "01:21"
  },
  {
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "llms.txt",
   "task": "Fetch llms.txt and docs index",
   "result": "done",
   "evidence": "https://www.taskade.com/llms.txt 200 (H1 'Taskade: AI App Builder...', Last-Updated 2026-10-07); https://www.taskade.com/docs/llms.txt 200 lists REST v1 (~70 ops), Action v2, MCP, webhooks, SDK pages as .md links",
   "quality": {
    "docs_match": "match"
   },
   "t": "01:21"
  },
  {
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": false,
   "capability": "openapi",
   "task": "Fetch OpenAPI v1 spec",
   "result": "blocked",
   "evidence": "",
   "notes": "spec version unknown: not fetched",
   "t": "01:31"
  },
  {
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "markdown docs",
   "task": "Accept: text/markdown and .md URL on a docs page",
   "result": "done",
   "evidence": "GET /docs/getting-started/quickstart with Accept: text/markdown -> 200 content-type text/markdown, vary includes accept; /docs/getting-started/quickstart.md -> 200 text/markdown",
   "t": "01:31"
  },
  {
   "cap": "discovery",
   "route": "mcp",
   "documented": true,
   "verified": false,
   "capability": "MCP server/discover",
   "task": "POST server/discover 2026-07-28 to https://www.taskade.com/mcp",
   "result": "blocked",
   "evidence": "HTTP 401 content-type application/json {\"error\":\"Unauthorized\"}; WWW-Authenticate: Bearer realm=\"mcp\", resource_metadata=\"https://www.taskade.com/mcp/.well-known/oauth-protected-resource\"",
   "notes": "auth required before discover",
   "t": "01:31"
  },
  {
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "MCP auth metadata",
   "task": "PRM and AS metadata",
   "result": "done",
   "evidence": "PRM https://www.taskade.com/mcp/.well-known/oauth-protected-resource and /.well-known/oauth-protected-resource/mcp 200 JSON {resource: https://www.taskade.com/mcp, authorization_servers:[https://www.taskade.com], scopes_supported:[mcp]}; root /.well-known/oauth-protected-resource 404 HTML. AS metadata /.well-known/oauth-authorization-server 200: registration_endpoint /oauth2/register (DCR), code+S256 PKCE, grants authorization_code, refresh_token; no client_id_metadata_document_supported, no device_authorization_endpoint, no agent_auth block",
   "t": "01:31"
  },
  {
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "cards",
   "task": "Server card, AI catalog, A2A agent card, UCP, auth.md, SKILL.md",
   "result": "done",
   "evidence": "/mcp/server-card 404 text/plain; /.well-known/ai-catalog.json 404 HTML; legacy /.well-known/mcp/server-card.json 200 application/json {serverInfo:{name:'Taskade MCP',version:'1.0.0'},authentication:{required:true,schemes:['oauth2']}}; /.well-known/agent-card.json 404; /.well-known/agent.json 404; /.well-known/ucp 404; /auth.md 404; /SKILL.md 404",
   "t": "01:31"
  },
  {
   "cap": "docs",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "docs",
   "task": "Find developer docs",
   "result": "done",
   "evidence": "https://www.taskade.com/docs/llms.txt, quickstart.md, hosted-mcp.md, action-api-guide.md fetched as Markdown",
   "quality": {
    "docs_match": "match"
   },
   "t": "01:31"
  },
  {
   "cap": "pay",
   "capability": "pay step public probes",
   "task": "Look for agent payment rails, billing API, checkout, trial terms",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pay_probe.json: no 402 challenges, no MPP/Stripe Projects/Bazaar listings, no MCP payment tools, free_plan true; pay_tx.json: refused 'no 402 on the product's own domain asks for USDC on a network we hold a wallet for'. Docs: /learn/account/upgrade-plan 'Click Manage / Update Plan to open the billing portal ... Follow the payment steps'; /learn/account/cancel-subscription 'click Cancel subscription. Pick a reason, click Continue to Cancel, and finish on the secure Stripe page'. No billing API in REST v1/Action v2 index (docs/llms.txt). /api/ is robots-disallowed so 402 on API paths not probed.",
   "notes": "Hosted Stripe billing portal, web only; free plan with no time limit.",
   "t": "01:49"
  },
  {
   "cap": "signup",
   "capability": "sign up",
   "task": "Sign up with email+password at https://www.taskade.com/signup",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Web form only (docs /learn/account/create-account: Google, Apple, SSO, email+password; no API sign-up). Form shows a visible Cloudflare Turnstile widget 'Verify you are human' (iframe challenges.cloudflare.com .../turnstile/.../0x4AAAAAAAc6vdvH5FRycu8l/auto/.../normal). Submitting without the widget token: POST /signup 400 {ok:false, details:'Validation error.', errors:{_:['Please refresh the page and try again.']}} shown as 'Sign Up Error / Please refresh the page and try again.' One retry after a page refresh gave the same 400. Screenshot browser/shots/003.png",
   "notes": "Agent does not tick Turnstile. Error text does not name the check. Asking a human via own-browser handoff.",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   },
   "t": "03:58"
  },
  {
   "cap": "signup",
   "capability": "sign up (human handoff)",
   "task": "Ask a human to do the Turnstile-gated sign-up in their own browser",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "",
   "notes": "Cloudflare Turnstile 'Verify you are human' widget on the sign-up form.",
   "t": "05:30"
  },
  {
   "cap": "first_action",
   "capability": "Generate app without account",
   "task": "Generate an app from /create?input=... without an account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Submitting the prompt on https://www.taskade.com/create redirects to https://www.taskade.com/signup?redirect=%2Fcreate...&mode=genesis (shots/007.png)",
   "notes": "Every build needs an account.",
   "t": "05:30"
  },
  {
   "cap": "credentials",
   "capability": "OAuth dynamic client registration",
   "task": "Register an OAuth client headless (DCR) for the hosted MCP",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "key": "create",
   "evidence": "POST https://www.taskade.com/oauth2/register 201 {client_id:'X1sWBhnD9ToT5w31', token_endpoint_auth_method:'none', grant_types:[authorization_code, refresh_token]}",
   "notes": "Client registration works headless, but the token still needs a signed-in Taskade user at /oauth2/authorize; we have no account. No device flow. Personal access tokens are web-UI only (docs: taskade.com/settings/api > Create token); no API/CLI route to mint a token.",
   "t": "05:30"
  },
  {
   "cap": "discovery",
   "capability": "MCP initialize fallback",
   "task": "initialize offering 2026-07-28 unauthenticated",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "POST https://www.taskade.com/mcp initialize -> 401 {\"error\":\"Unauthorized\"} with WWW-Authenticate Bearer resource_metadata",
   "notes": "Protocol version not observable without a token.",
   "t": "05:30"
  },
  {
   "cap": "verify",
   "capability": "verify email",
   "task": "verify email",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not reached: sign-up blocked by Cloudflare Turnstile; also the documented REST/Action API base https://www.taskade.com/api/v1|v2 is disallowed by robots.txt (Disallow: /api/) for all user agents",
   "notes": "not reached",
   "t": "05:30"
  },
  {
   "cap": "first_call",
   "capability": "first API/MCP call",
   "task": "first API/MCP call",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Not reached: sign-up blocked by Cloudflare Turnstile; also the documented REST/Action API base https://www.taskade.com/api/v1|v2 is disallowed by robots.txt (Disallow: /api/) for all user agents",
   "notes": "not reached",
   "t": "05:30"
  },
  {
   "cap": "cap-31",
   "capability": "Create and revoke a personal access token",
   "task": "Check against the docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented web-UI only: /docs/getting-started/personal-tokens.md 'Click Create token' at taskade.com/settings/api; revoke in the Personal access tokens list; max 5 tokens. No API/CLI route. Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:54"
  },
  {
   "cap": "cap-32",
   "capability": "Upgrade/downgrade plan",
   "task": "Check against the docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented web-UI only: /learn/account/upgrade-plan (Settings > Billing > Manage / Update Plan opens the billing portal), cancel via Stripe page. Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:54"
  },
  {
   "cap": "cap-34",
   "capability": "Workspaces and folders",
   "task": "Check against the docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented: GET /workspaces, GET /workspaces/{id}/folders, POST /workspaces/{id}/projects (docs/llms.txt REST section); base URL /api/v1 is robots-disallowed. Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:54"
  },
  {
   "cap": "cap-35",
   "capability": "Multi-platform clients",
   "task": "Check against the docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented: /downloads lists iOS, Android, macOS, Windows, Linux and browser extensions (llms.txt). Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:54"
  },
  {
   "cap": "cap-29",
   "capability": "Local workspace MCP server",
   "task": "Check against the docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented: npm @taskade/mcp-server run with TASKADE_API_KEY (a personal access token) and it calls REST API v1 (docs/mcp/workspace-mcp.md); needs a token we cannot get, and its calls go to the robots-disallowed /api/v1. Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:54"
  },
  {
   "cap": "cap-15",
   "capability": "Connect a custom domain",
   "task": "Check plan and docs",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "/learn/genesis/custom-domains; llms.txt 'Custom domains are Business+.'",
   "notes": "Not reached anyway: Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:54"
  },
  {
   "cap": "cap-33",
   "capability": "SSO/SAML and SCIM",
   "task": "Check plan and docs",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "capabilities map plan: paid (Enterprise); learn/account mentions SSO/SAML",
   "notes": "Not reached anyway: Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:55"
  },
  {
   "cap": "cap-10",
   "capability": "Inbound webhook trigger",
   "task": "Check plan and docs",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "docs/guides/webhooks.md: 'Webhook triggers run on Pro and above. On Free and Starter, a call returns 402 with code: \"PAYMENT_REQUIRED\"'",
   "notes": "Not reached anyway: Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:55"
  },
  {
   "cap": "cap-11",
   "capability": "Outbound signed webhook subscription",
   "task": "Check plan and docs",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "docs/guides/webhooks.md: 'Webhook triggers and the Webhook Registration API return 402 on Free and Starter' (POST /api/v2/webhooks)",
   "notes": "Not reached anyway: Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:55"
  },
  {
   "cap": "cap-08",
   "capability": "Multi-agent team",
   "task": "Check plan and docs",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "capabilities map plan: paid; llms.txt Agent teams",
   "notes": "Not reached anyway: Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:55"
  },
  {
   "cap": "cap-16",
   "capability": "App users / email sign-in",
   "task": "Check plan and docs",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "capabilities map plan: paid (App Users beta)",
   "notes": "Not reached anyway: Not driven: no account (sign-up behind Cloudflare Turnstile).",
   "t": "05:55"
  },
  {
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "Cancel a started plan",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No plan or trial started (no account). Docs /learn/account/cancel-subscription: Settings > Billing > Cancel subscription, 'Before you go...' reason screen, 'Before you cancel, one option' screen, then 'finish on the secure Stripe page'.",
   "notes": "not tested: no plan or trial was started",
   "t": "06:16"
  },
  {
   "cap": "delete",
   "capability": "delete account",
   "task": "Delete the account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account was created (sign-up blocked by Cloudflare Turnstile). Docs /learn/projects/account-deletion: Account settings > type email in Confirm Email > click Delete Account twice; web UI only, no API route in docs/llms.txt.",
   "notes": "not tested: no account",
   "t": "06:16"
  }
 ],
 "stale": false,
 "icon": "/logos/taskade.png",
 "monitored": false,
 "verdict": "Stopped at signup: L1 · Needs a person. Taskade's sign-up is a web form guarded by a visible Cloudflare Turnstile widget, so our agent never got an account. Everything past that stayed out of reach: personal access tokens are made only in the web UI, the documented API base is disallowed for crawling, and the hosted MCP server needs a paid workspace. The docs hold up well: llms.txt indexes the docs and every docs page ships as Markdown. Paying and cancelling were never reached since no account existed.",
 "page": "https://agentdrives.com/tools/taskade?via=api"
}