{
 "slug": "teamwork",
 "name": "Teamwork.com",
 "url": "https://teamwork.com",
 "domain": "teamwork.com",
 "category": "project-management",
 "category_name": "Project management",
 "tested_at": "2026-10-06",
 "run": "20261006T092847Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T223036Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": null,
    "robots": "start"
   }
  },
  {
   "run": "20261006T092847Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": null,
    "robots": "start"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "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",
    "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"
   }
  ]
 },
 "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": null,
  "prompt_sha": "f3d0adeeb256",
  "kb_version": "2+overlay-9e43028a2c",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": null,
  "robots": "start"
 },
 "same_level_drives": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": {
  "rung": "signup",
  "vendor": "reCAPTCHA (invisible)",
  "signed": true
 },
 "who_gets_in": {
  "server": {
   "state": "closed"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-13"
  },
  "browser": {
   "state": "unknown",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "apidocs.teamwork.com guides plus a Swagger 2.0 spec (projects-api-v3.oas2.yml, 429 operations); MCP docs at github.com/teamwork/mcp; /llms.txt."
  },
  "signup": {
   "status": "blocked",
   "note": "No signup API. The browser form (agent's own browser) passed step 1 with reCAPTCHA invisible; step 2 requires a phone number ('The phone field is required') that our agent does not have, so sign-up was never completed."
  },
  "verify": {
   "status": "",
   "note": "Sign-up not completed; no mail.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "API key or OAuth needs an account. AS: authorization_code + PKCE, DCR; no device flow, CIMD or agent_auth.",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "Unauthenticated API returns 401 Basic; MCP tools/list 401.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "No credentials.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [
    "credit card in app",
    "bank transfer (annual)"
   ],
   "rail_ids": [
    "card"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No 402, x402, MPP, UCP or Stripe Projects. pricing.md: 14-day trial without a card, card or bank transfer to pay, upgrades in the app; checkout not reachable without an account, and sign-up needs a phone number.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "grade": "n/a",
   "note": "No plan started.",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was created.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [
   {
    "id": "card",
    "name": "Card checkout",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": true,
   "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": false,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST v3, 429 operations in the Swagger spec; Basic API key or OAuth bearer",
  "openapi": "Swagger 2.0, behind current 3.2",
  "mcp": "official remote server, supports the 28 Jul 2026 MCP spec; tools not listed (auth)",
  "llms_txt": "www only, H1 present"
 },
 "can_do": [
  "Discover the MCP server and negotiate MCP (the 28 Jul 2026 spec) without an account",
  "Read the API spec, llms.txt and pricing as Markdown"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "Sign-up form requires a phone number"
  },
  {
   "what": "Any project, task or time action",
   "why": "Every API/MCP route needs credentials from an account"
  }
 ],
 "blockers": [
  "Required phone number at sign-up step 2"
 ],
 "tips_for_owner": [
  "Make the sign-up phone number optional",
  "Add a headless credential path for agents",
  "Support CIMD for MCP client registration",
  "Publish agent-card.json at the current path",
  "Return problem+json errors with clear titles"
 ],
 "tips_for_agents": [
  "Use the MCP server at https://mcp.ai.teamwork.com/ (speaks 2026-07-28); auth is a bearer API token or OAuth.",
  "A human has to create the account: sign-up asks for a phone number.",
  "REST v3 at https://{site}.teamwork.com/projects/api/v3/, Basic auth with the API key; 150 req/min on lower plans."
 ],
 "selfhost": null,
 "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.",
 "wall": "Phone number required at sign-up",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Teamwork.com is a project-management and billing tool. An AI agent could look at its documentation, its API spec and its AI-connector (MCP) setup entirely on its own, but could not create an account because the sign-up form demands a phone number the agent doesn't have, so it never did any real work in the product.",
  "can_do": [
   "Read the API documentation, pricing and setup guides without logging in",
   "Check what versions of the AI-connector protocol the service supports"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "The sign-up form requires a phone number"
   },
   {
    "what": "Create projects, tasks, log time, or anything else in the product",
    "why": "Every action needs an account that could not be created"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Projects",
   "capability": "Create a project",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects.json",
    "mcp": "create project (manifest, teamwork/mcp)",
    "cli": null,
    "ui": "Projects > New Project"
   },
   "check": "GET /projects/{id}.json returns the new project",
   "source": "https://www.teamwork.com/product/; https://apidocs.teamwork.com/docs/teamwork"
  },
  {
   "id": "cap-02",
   "group": "Tasks",
   "capability": "Create and assign a task",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /tasklists/{id}/tasks.json",
    "mcp": "create task",
    "cli": null,
    "ui": "Project > Task lists"
   },
   "check": "GET /tasks/{id}.json shows assignee and status",
   "source": "https://www.teamwork.com/product/; https://www.teamwork.com/ai/mcp/"
  },
  {
   "id": "cap-03",
   "group": "Tasks",
   "capability": "View and manage tasks in Lists, Kanban Board, Table, Gantt, My Work and Everything views",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project views (List/Board/Table/Gantt), My Work, Everything"
   },
   "check": "Switching the view selector renders the same tasks in the chosen layout",
   "source": "https://www.teamwork.com/product/#choose-your-own-journey; https://www.teamwork.com/product/gantt-chart/; https://www.teamwork.com/product/board-view/"
  },
  {
   "id": "cap-04",
   "group": "Time tracking",
   "capability": "Log billable/non-billable time against tasks",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /tasks/{id}/time_entries.json",
    "mcp": "log time",
    "cli": null,
    "ui": "Task > Log time / Timer"
   },
   "check": "GET /time_entries.json shows the new entry with billable flag",
   "source": "https://www.teamwork.com/product/time-tracking/"
  },
  {
   "id": "cap-05",
   "group": "Resourcing",
   "capability": "Plan workload and capacity across the team",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET /workload.json",
    "mcp": null,
    "cli": null,
    "ui": "Resource Management > Workload/Capacity"
   },
   "check": "Workload view reflects hours allocated per person for a date range",
   "source": "https://www.teamwork.com/product/resource-management/capacity-planning/; https://www.teamwork.com/pricing/"
  },
  {
   "id": "cap-06",
   "group": "Financials",
   "capability": "Track project cost, budget and profitability",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET /projects/{id}/budgets.json",
    "mcp": null,
    "cli": null,
    "ui": "Project > Budget / Financials"
   },
   "check": "Budget page shows spend-vs-budget and profit margin updating as time/expenses are logged",
   "source": "https://www.teamwork.com/product/cost-profitability-management/; https://www.teamwork.com/product/cost-profitability-management/budgeting-profitability/"
  },
  {
   "id": "cap-07",
   "group": "Financials",
   "capability": "Create a client quote",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Quotes module"
   },
   "check": "Quote shows status (Draft/Open/Accepted/Rejected) and converts to a project",
   "source": "https://www.teamwork.com/product/cost-profitability-management/quoting-costing-work/"
  },
  {
   "id": "cap-08",
   "group": "Financials",
   "capability": "Generate and send client invoices from logged time",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /invoices.json",
    "mcp": null,
    "cli": null,
    "ui": "Project > Invoices (syncs to Xero/QuickBooks)"
   },
   "check": "GET /invoices/{id}.json shows invoice line items generated from time entries",
   "source": "https://www.teamwork.com/pricing/ (Accelerate: 'client invoicing from logged time')"
  },
  {
   "id": "cap-09",
   "group": "Reporting",
   "capability": "View project health, utilization and profitability reports",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET /reporting/...",
    "mcp": "analyze project health",
    "cli": null,
    "ui": "Reporting dashboard"
   },
   "check": "Report page renders Project Health / Utilization / Profitability charts for selected date range",
   "source": "https://www.teamwork.com/product/reporting/; https://www.teamwork.com/product/#reports"
  },
  {
   "id": "cap-10",
   "group": "Tasks",
   "capability": "Set milestones to mark delivery checkpoints",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /projects/{id}/milestones.json",
    "mcp": "create/track milestones",
    "cli": null,
    "ui": "Project > Milestones"
   },
   "check": "GET /milestones/{id}.json shows milestone with due date and completion status",
   "source": "https://support.teamwork.com/projects/getting-started/milestones-overview; https://www.teamwork.com/ai/mcp/"
  },
  {
   "id": "cap-11",
   "group": "Templates",
   "capability": "Save a project or task list as a reusable template",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project > Save as template; Templates library"
   },
   "check": "New project created from template pre-populates its task lists/tasks",
   "source": "https://www.teamwork.com/templates/; https://www.teamwork.com/pricing/ (Basics: unlimited project templates)"
  },
  {
   "id": "cap-12",
   "group": "Automation",
   "capability": "Automate workflow steps with rules/automations",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Automations gallery / builder"
   },
   "check": "Triggering the automation's condition (e.g. task moved to a column) performs the configured action",
   "source": "https://www.teamwork.com/product/automations/; https://www.teamwork.com/pricing/"
  },
  {
   "id": "cap-13",
   "group": "Client collaboration",
   "capability": "Manage client-specific views and client users",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /people.json (client user)",
    "mcp": null,
    "cli": null,
    "ui": "Clients view; People > Add client user"
   },
   "check": "Client user login shows only projects linked to their company, with restricted permissions",
   "source": "https://www.teamwork.com/product/client-management/; https://support.teamwork.com/projects/using-teamwork/working-with-client-users"
  },
  {
   "id": "cap-14",
   "group": "Forms & intake",
   "capability": "Collect requests via smart intake forms that become tasks",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Forms builder"
   },
   "check": "Submitting the public form link creates a new task in the configured project",
   "source": "https://www.teamwork.com/product/forms/; https://www.teamwork.com/pricing/ (Accelerate: smart intake forms)"
  },
  {
   "id": "cap-15",
   "group": "Proofing",
   "capability": "Run client review/approval (proofing) on files",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Proofs module"
   },
   "check": "Uploaded file shows annotation comments and an approval/sign-off state",
   "source": "https://www.teamwork.com/product/proofs/"
  },
  {
   "id": "cap-16",
   "group": "Resourcing",
   "capability": "Forecast and plan tentative/future resourcing before a deal closes",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Resource Management > Tentative projects / Forecasting"
   },
   "check": "Tentative project schedule reserves capacity without affecting committed workload totals",
   "source": "https://www.teamwork.com/product/resource-management/tentative-projects/; https://www.teamwork.com/product/resource-management/resource-forecasting/"
  },
  {
   "id": "cap-17",
   "group": "Resourcing",
   "capability": "Organize staffing by Skills and Roles",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Planning > Skills and Roles"
   },
   "check": "Task/resource assignment filter by skill or role returns matching team members",
   "source": "https://support.teamwork.com/projects/planning/skills"
  },
  {
   "id": "cap-18",
   "group": "Financials",
   "capability": "Set custom cost and billable rates per person/role/project/client",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "People/Project > Billable rates"
   },
   "check": "Invoice or profitability report reflects the custom rate instead of the default",
   "source": "https://www.teamwork.com/blog/new-billable-rates-to-celebrate-role-and-client/"
  },
  {
   "id": "cap-19",
   "group": "Financials",
   "capability": "Bill in multiple currencies",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Client/Project currency settings"
   },
   "check": "Invoice generated for a non-default-currency client shows converted, localized totals",
   "source": "https://www.teamwork.com/blog/think-global-bill-local-with-multi-currency/; https://www.teamwork.com/pricing/ (Optimize: multi-currency financial budgets)"
  },
  {
   "id": "cap-20",
   "group": "AI",
   "capability": "Generate a project (tasks, timelines, team suggestions) from a text brief",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": "AI project wizard / Flo teammate",
    "cli": null,
    "ui": "New Project > AI project wizard"
   },
   "check": "Submitting a brief in the wizard produces a populated project with task lists and suggested assignees",
   "source": "https://www.teamwork.com/ai/; https://www.teamwork.com/pricing/ (AI teammates: Flo)"
  },
  {
   "id": "cap-21",
   "group": "AI",
   "capability": "Get AI resourcing suggestions (Smart Assign) and utilization summaries",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": "Remi teammate",
    "cli": null,
    "ui": "Scheduling > Smart Assign; Utilization summary"
   },
   "check": "Smart Assign recommends a specific team member with available hours for an unassigned task",
   "source": "https://www.teamwork.com/ai/; https://www.teamwork.com/pricing/ (Accelerate adds Remi)"
  },
  {
   "id": "cap-22",
   "group": "AI",
   "capability": "Get AI financial forecasts and at-risk project flags (Kash)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": "Kash teammate",
    "cli": null,
    "ui": "AI financial insights"
   },
   "check": "Ask-AI query 'Which projects are at risk this month?' returns a list with named risk reasons",
   "source": "https://www.teamwork.com/ai/; https://www.teamwork.com/pricing/ (Optimize adds Kash)"
  },
  {
   "id": "cap-23",
   "group": "AI",
   "capability": "Ask AI natural-language questions over project data and get summaries",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Ask AI search box; Scout teammate"
   },
   "check": "Typing 'Plan my week' or a task search in Ask AI returns a relevant, scoped answer",
   "source": "https://www.teamwork.com/ai/; https://www.teamwork.com/pricing/ (Basics adds Scout)"
  },
  {
   "id": "cap-24",
   "group": "AI",
   "capability": "Build custom AI agents/workflows (Jack)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": "Jack teammate",
    "cli": null,
    "ui": "AI Teammates > Jack"
   },
   "check": "Custom agent configured in Jack executes its defined workflow and logs hours against project margin",
   "source": "https://www.teamwork.com/pricing/ (Optimize/Enterprise adds Jack); https://www.teamwork.com/ai/teammates/"
  },
  {
   "id": "cap-26",
   "group": "Collaboration",
   "capability": "Connect team chat tools",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Integrations > Chat"
   },
   "check": "A task update posts a notification into the connected chat channel",
   "source": "https://www.teamwork.com/pricing/ (Free: 'connect chat tools')"
  },
  {
   "id": "cap-27",
   "group": "Integrations",
   "capability": "Sync with CRM and finance tools (HubSpot, Salesforce, Xero, QuickBooks, NetSuite)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Integrations marketplace"
   },
   "check": "Connected integration shows synced records (e.g. invoice appears in Xero) after enabling",
   "source": "https://www.teamwork.com/integrations/; https://www.teamwork.com/pricing/"
  },
  {
   "id": "cap-28",
   "group": "Integrations",
   "capability": "Import projects from other tools (Wrike, Asana, Basecamp, ClickUp, Trello, Monday)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Import"
   },
   "check": "One-click import creates matching projects/tasks from the source tool's export",
   "source": "https://www.teamwork.com/pricing/ (Switching tools: one-click project import)"
  },
  {
   "id": "cap-29",
   "group": "Desk",
   "capability": "Turn customer support tickets into tasks (Teamwork Desk)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "Teamwork Desk API",
    "mcp": null,
    "cli": null,
    "ui": "Teamwork Desk"
   },
   "check": "Desk ticket converted to a task appears linked in the target project",
   "source": "https://www.teamwork.com/desk/; https://apidocs.teamwork.com/docs/desk"
  },
  {
   "id": "cap-30",
   "group": "Content",
   "capability": "Manage content/wiki pages (Teamwork Spaces)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "Teamwork Spaces API",
    "mcp": null,
    "cli": null,
    "ui": "Teamwork Spaces"
   },
   "check": "Created Spaces page is listed and retrievable via the Spaces API",
   "source": "https://apidocs.teamwork.com/docs/spaces"
  },
  {
   "id": "cap-31",
   "group": "Calendar",
   "capability": "View team availability with holidays and external calendar events",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Planning > Availability (Google/Outlook calendar sync)"
   },
   "check": "Connected Google/Outlook event appears as a busy block in the team's availability view",
   "source": "https://www.teamwork.com/blog/unlock-true-team-availability-with-google-outlook-calendar-in-planning/"
  },
  {
   "id": "cap-32",
   "group": "Admin",
   "capability": "Set role-based permissions and project privacy levels",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Permissions; Project privacy"
   },
   "check": "A user without the assigned permission cannot view/edit the restricted project or field",
   "source": "https://www.teamwork.com/product/; https://support.teamwork.com/projects/agency-professional-services/understanding-user-permissions-and-access"
  },
  {
   "id": "cap-33",
   "group": "Admin",
   "capability": "Enforce advanced security (SSO, 2FA)",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Security"
   },
   "check": "SSO-enabled account redirects login to the configured identity provider",
   "source": "https://www.teamwork.com/pricing/ (Enterprise: SSO); https://support.teamwork.com/projects/security/enabling-two-factor-authentication-on-your-profile"
  },
  {
   "id": "cap-34",
   "group": "Admin",
   "capability": "Brand the site/project with a custom domain and logo",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Custom domain / Logo"
   },
   "check": "Site loads under the configured custom domain with the uploaded logo shown",
   "source": "https://support.teamwork.com/projects/general-settings/using-a-custom-domain-name; https://support.teamwork.com/projects/agency-professional-services/adding-a-site-logo"
  },
  {
   "id": "cap-35",
   "group": "Admin",
   "capability": "Choose data hosting region (US or EU)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Account setup region selector"
   },
   "check": "Account's data residency matches the region selected at signup",
   "source": "https://www.teamwork.com/pricing/"
  }
 ],
 "attempts": [
  {
   "t": "06:55",
   "cap": "discovery",
   "capability": "robots.txt / aipref",
   "task": "Fetch robots.txt and look for Content-Usage / Content-signal",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET https://www.teamwork.com/robots.txt 200 text/plain: groups for *, GPTBot, ClaudeBot, Google-Extended, PerplexityBot, Claude-User etc., all Disallow /launchpad/* with Allow for js/css/login; no Content-Usage or Content-signal lines; no Content-Usage response header on www.teamwork.com",
   "notes": "No aipref preferences."
  },
  {
   "t": "06:55",
   "cap": "discovery",
   "capability": "llms.txt",
   "task": "Fetch /llms.txt",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://www.teamwork.com/llms.txt 200 text/plain, 74 lines, H1 '# Teamwork.com'; links pricing.md; apidocs.teamwork.com/llms.txt 404"
  },
  {
   "t": "06:55",
   "cap": "discovery",
   "capability": "markdown docs",
   "task": "Accept: text/markdown and .md URLs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "www.teamwork.com/pricing/ with Accept: text/markdown -> content-type text/markdown, vary: Accept; https://www.teamwork.com/pricing.md 200 text/markdown. apidocs.teamwork.com guide with Accept: text/markdown -> text/html; .md URL -> 404",
   "notes": "Marketing site does both; API docs site neither."
  },
  {
   "t": "06:55",
   "cap": "discovery",
   "capability": "A2A / AI catalog / server card",
   "task": "Probe agent-card.json, agent.json, ai-catalog.json, mcp server-card",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "/.well-known/agent-card.json 404 html; legacy /.well-known/agent.json 200 application/json (name Teamwork.com, url https://mcp.ai.teamwork.com/, version 1.51.0, no protocolVersion field, 4 skills); /.well-known/ai-catalog.json 404 on www, 405 on mcp host; https://mcp.ai.teamwork.com/server-card 401 Unauthorized; /.well-known/mcp/server-card.json 404"
  },
  {
   "t": "06:55",
   "cap": "discovery",
   "capability": "MCP server/discover",
   "task": "POST server/discover with MCP-Protocol-Version 2026-07-28 to https://mcp.ai.teamwork.com/",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "200 text/event-stream: result supportedVersions [2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05], serverInfo Teamwork.com 1.51.0, capabilities tools/prompts/resources, extension io.modelcontextprotocol/ui. tools/list without auth -> 401 WWW-Authenticate: Bearer resource_metadata=\"https://mcp.ai.teamwork.com/.well-known/oauth-protected-resource\"",
   "quality": {
    "error_legibility": "clear",
    "docs_match": "match"
   }
  },
  {
   "t": "06:55",
   "cap": "discovery",
   "capability": "OAuth PRM / AS metadata",
   "task": "Fetch PRM and AS metadata",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "mcp.ai.teamwork.com/.well-known/oauth-protected-resource 200 JSON, authorization_servers [https://teamwork.com], scopes chat/desk/projects/spaces. www.teamwork.com/.well-known/oauth-authorization-server 200 JSON: authorization_code only, PKCE S256, registration_endpoint https://www.teamwork.com/developer/api/v1/apps/register.json, no client_id_metadata_document_supported, no device_authorization_endpoint, no agent_auth block",
   "notes": "DCR only (deprecated path); no CIMD, no device flow."
  },
  {
   "t": "06:55",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Create a free account at https://www.teamwork.com/signup/ (no documented signup API)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Step 1 (email, password, name) accepted in the browser; reCAPTCHA present but invisible, no visible challenge. Step 2 asks industry, company size, seats, role, company name and a required 'Phone Number *'. Submitting without it: 'The phone field is required'. Shown for both truthful industry choices tried.",
   "notes": "Phone number required; our agent has none, so we stop. Google sign-in is the only other option.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "08:22",
   "cap": "docs",
   "capability": "Find API docs",
   "task": "Locate API reference, auth and OpenAPI",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "apidocs.teamwork.com: guides (authentication: Basic with API key or OAuth2 bearer; rate-limit), Swagger 2.0 specs on contento-assets S3: projects-api-v3.oas2.yml ('swagger': '2.0', info.version 3.0, 318 paths, 429 operations), v1 and v2 specs too. MCP server docs: github.com/teamwork/mcp README (bearer token or OAuth2).",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "08:22",
   "cap": "discovery",
   "capability": "API error shape",
   "task": "Unauthenticated GET and POST on https://x402.teamwork.com/projects/api/v3/projects.json (pay step 402 probe)",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "401, content-type application/json, WWW-Authenticate: Basic realm=\"Teamwork.com\", body {\"errors\":[{\"id\":\"…\",\"title\":\"unexpected error\",\"detail\":\"401: Not authorized\"}]}. Not RFC 9457 problem+json; title 'unexpected error' for a plain auth failure.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "08:22",
   "cap": "pay",
   "capability": "Pay step",
   "task": "Probe 402 rails and discovery without paying",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "No 402 anywhere: API base -> 401 Basic; x402./mpp./agents.teamwork.com are the wildcard customer-site app shell (200 html), API on them 401; /.well-known/ucp 404 html; /openapi.json 404; no x-payment-info in OAS; no teamwork entry in x402 Bazaar or mpp.dev/api/services or projects.dev; /auth.md and /SKILL.md 404. pricing.md: paid plans 14-day trial 'no credit card required'; payment by credit card (Visa, MasterCard, Maestro) monthly or bank transfer annual; upgrades inside the product. Checkout itself not reachable without an account.",
   "notes": "No agent rail; the trial needs no card, but reaching it needs a phone number at sign-up and paying needs a card a human enters in the app."
  },
  {
   "t": "08:22",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Verify the account email",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Sign-up never completed (phone wall at step 2); inbox an inbox received no mail."
  },
  {
   "t": "08:22",
   "cap": "credentials",
   "capability": "API credentials",
   "task": "Get an API key or OAuth token",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "API keys are per user inside an account (Basic auth with API key) and OAuth needs a Teamwork login at www.teamwork.com/launchpad/login; no account. AS metadata: authorization_code + PKCE only, DCR registration_endpoint, no device flow, no CIMD, no agent_auth."
  },
  {
   "t": "08:22",
   "cap": "cap-01",
   "capability": "Create a project",
   "task": "Create a project via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-02",
   "capability": "Create and assign a task",
   "task": "Create and assign a task via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-03",
   "capability": "View and manage tasks in Lists, Kanban Board, Table, Gantt, My Work and Everything views",
   "task": "View and manage tasks in Lists, Kanban Board, Table, Gantt, My Work and Everything views via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-04",
   "capability": "Log billable/non-billable time against tasks",
   "task": "Log billable/non-billable time against tasks via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-05",
   "capability": "Plan workload and capacity across the team",
   "task": "Plan workload and capacity across the team via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-06",
   "capability": "Track project cost, budget and profitability",
   "task": "Track project cost, budget and profitability via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-07",
   "capability": "Create a client quote",
   "task": "Create a client quote via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-08",
   "capability": "Generate and send client invoices from logged time",
   "task": "Generate and send client invoices from logged time via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-09",
   "capability": "View project health, utilization and profitability reports",
   "task": "View project health, utilization and profitability reports via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-10",
   "capability": "Set milestones to mark delivery checkpoints",
   "task": "Set milestones to mark delivery checkpoints via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-11",
   "capability": "Save a project or task list as a reusable template",
   "task": "Save a project or task list as a reusable template via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-12",
   "capability": "Automate workflow steps with rules/automations",
   "task": "Automate workflow steps with rules/automations via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-13",
   "capability": "Manage client-specific views and client users",
   "task": "Manage client-specific views and client users via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-14",
   "capability": "Collect requests via smart intake forms that become tasks",
   "task": "Collect requests via smart intake forms that become tasks via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-15",
   "capability": "Run client review/approval (proofing) on files",
   "task": "Run client review/approval (proofing) on files via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-16",
   "capability": "Forecast and plan tentative/future resourcing before a deal closes",
   "task": "Forecast and plan tentative/future resourcing before a deal closes via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-17",
   "capability": "Organize staffing by Skills and Roles",
   "task": "Organize staffing by Skills and Roles via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-18",
   "capability": "Set custom cost and billable rates per person/role/project/client",
   "task": "Set custom cost and billable rates per person/role/project/client via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-19",
   "capability": "Bill in multiple currencies",
   "task": "Bill in multiple currencies via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-20",
   "capability": "Generate a project (tasks, timelines, team suggestions) from a text brief",
   "task": "Generate a project (tasks, timelines, team suggestions) from a text brief via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-21",
   "capability": "Get AI resourcing suggestions (Smart Assign) and utilization summaries",
   "task": "Get AI resourcing suggestions (Smart Assign) and utilization summaries via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-22",
   "capability": "Get AI financial forecasts and at-risk project flags (Kash)",
   "task": "Get AI financial forecasts and at-risk project flags (Kash) via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-23",
   "capability": "Ask AI natural-language questions over project data and get summaries",
   "task": "Ask AI natural-language questions over project data and get summaries via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-24",
   "capability": "Build custom AI agents/workflows (Jack)",
   "task": "Build custom AI agents/workflows (Jack) via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-26",
   "capability": "Connect team chat tools",
   "task": "Connect team chat tools via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-27",
   "capability": "Sync with CRM and finance tools (HubSpot, Salesforce, Xero, QuickBooks, NetSuite)",
   "task": "Sync with CRM and finance tools (HubSpot, Salesforce, Xero, QuickBooks, NetSuite) via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-28",
   "capability": "Import projects from other tools (Wrike, Asana, Basecamp, ClickUp, Trello, Monday)",
   "task": "Import projects from other tools (Wrike, Asana, Basecamp, ClickUp, Trello, Monday) via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-29",
   "capability": "Turn customer support tickets into tasks (Teamwork Desk)",
   "task": "Turn customer support tickets into tasks (Teamwork Desk) via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-30",
   "capability": "Manage content/wiki pages (Teamwork Spaces)",
   "task": "Manage content/wiki pages (Teamwork Spaces) via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-31",
   "capability": "View team availability with holidays and external calendar events",
   "task": "View team availability with holidays and external calendar events via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-32",
   "capability": "Set role-based permissions and project privacy levels",
   "task": "Set role-based permissions and project privacy levels via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-33",
   "capability": "Enforce advanced security (SSO, 2FA)",
   "task": "Enforce advanced security (SSO, 2FA) via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-34",
   "capability": "Brand the site/project with a custom domain and logo",
   "task": "Brand the site/project with a custom domain and logo via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  },
  {
   "t": "08:22",
   "cap": "cap-35",
   "capability": "Choose data hosting region (US or EU)",
   "task": "Choose data hosting region (US or EU) via API/MCP",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up requires a phone number (see signup attempt); every API/MCP route needs Basic API key or OAuth bearer (401 unauthenticated)."
  }
 ],
 "stale": false,
 "icon": "/logos/teamwork.png",
 "monitored": false,
 "verdict": "Needs a person. Sign-up stops at the account form: after passing an invisible reCAPTCHA, it asks for a phone number our agent did not have, and no human supplied one. The account was never created. With no account, the key page, the official MCP server and the Swagger-documented endpoints stayed out of reach. Our agent got only an unauthenticated 401 from the API and from MCP's tools list, and no work was attempted. The pricing page lists a trial without a card and payment by card or bank transfer, but checkout sits behind the same sign-up form: our agent never reached it, and never had an account to cancel or delete.",
 "page": "https://agentdrives.com/tools/teamwork?via=api"
}