{
 "slug": "front",
 "name": "Front",
 "url": "https://front.com",
 "domain": "front.com",
 "category": "customer-support",
 "category_name": "Customer support",
 "tested_at": "2026-10-06",
 "run": "20261006T074749Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T223856Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261006T074749Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "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": "OpenAPI",
    "state": "behind",
    "behind": 2,
    "value": "3.0.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": [
   "agentdrives.com"
  ],
  "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": null,
 "who_gets_in": {
  "server": {
   "state": "closed"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "unknown",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "dev.frontapp.com/llms.txt, a .md version of every page, Accept: text/markdown answered with text/markdown and Vary: Accept; OpenAPI 3.0.0 Core API spec (246 operations) on GitHub; MCP server docs."
  },
  "signup": {
   "status": "human",
   "note": "No sign-up API. The only route is the web form at front.com/signup (also the pricing modal and the docs' developer-account link, which redirects there). It requires a phone number and a job title. Our agent has no phone number, so we stopped. No CAPTCHA on the form."
  },
  "verify": {
   "status": "",
   "note": "Not reached: no account.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Not reached. API tokens are made in Settings > Developers by an admin; the MCP server needs an OAuth app (client id + secret) also made in Front settings. The AS offers no DCR, no CIMD, no device flow and no agent registration.",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "Unauthenticated calls to api2.frontapp.com and mcp.frontapp.com answer 401 with clear JSON errors.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Not reached: no account.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [],
   "rail_ids": [],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No x402, MPP, UCP or billing API; no 402 anywhere; not in mpp.dev or the x402 Bazaar. Starter has a 14-day trial with no card (pricing FAQ), but starting it needs a phone number; Professional and Enterprise go through Request a Demo. The in-app checkout was not reached, so not observed.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "grade": "n/a",
   "note": "No plan or trial was started.",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was created, so there was nothing to delete and the delete route was not tested.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [],
  "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": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST Core API at api2.frontapp.com, 246 operations, from 50 req/min per company, x-ratelimit-* headers",
  "openapi": "3.0.0 on GitHub (frontapp/front-api-specs), behind the 3.2 line",
  "mcp": "official, OAuth with a pre-registered confidential client, docs say the 25 Nov 2025 MCP spec",
  "llms_txt": "front.com/llms.txt and dev.frontapp.com/llms.txt"
 },
 "can_do": [
  "Read the full developer docs as Markdown (llms.txt, .md URLs, Accept: text/markdown)",
  "Read the Core API OpenAPI spec and the MCP server's OAuth metadata without an account"
 ],
 "cannot_do": [
  {
   "what": "Create a trial or developer account",
   "why": "The sign-up form requires a phone number (and a job title); there is no sign-up API."
  },
  {
   "what": "Get an API token or MCP access",
   "why": "Both are created inside a Front account (API tokens by an admin in Settings > Developers; MCP needs an OAuth app); no DCR, CIMD or device flow."
  },
  {
   "what": "Use any core capability (inbox, replies, status, assignment, tags)",
   "why": "No account, so every API and MCP call answers 401."
  }
 ],
 "blockers": [
  "Phone number required on the trial sign-up form",
  "Credentials only from inside the app: no agent registration, DCR or CIMD for MCP"
 ],
 "tips_for_owner": [
  "Make phone number optional at sign-up",
  "Fix the developer-account sign-up link",
  "Support CIMD on the MCP authorization server",
  "Publish the 28 Jul 2026 MCP spec and server card",
  "Add a billing API for plan changes"
 ],
 "tips_for_agents": [
  "You need a human to create the Front account (phone number at sign-up) and then an admin API token or an OAuth app.",
  "Docs are agent-friendly: start at dev.frontapp.com/llms.txt; every page has a .md URL.",
  "The MCP server needs a confidential OAuth client (id + secret); clients that only do DCR cannot connect.",
  "API rate limits are per company, from 50 req/min; read x-ratelimit-* headers."
 ],
 "selfhost": null,
 "summary": "Front's docs are well prepared for agents (llms.txt, Markdown pages, OpenAPI, an official MCP server), but an agent cannot get in: the only sign-up route is a web form that requires a phone number, and API tokens and MCP OAuth clients are only made inside an account. No core capability could be driven.",
 "wall": "Phone number required on trial sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Front is a shared-inbox tool for customer support teams, with AI features like auto-drafted replies and automated ticket resolution. An agent working alone could read all the developer documentation but could not create an account or get any working credentials, so it could not try any of the actual inbox or ticketing features. It stopped because the sign-up form demands a phone number, which the agent didn't have.",
  "can_do": [
   "Read the full developer documentation, including a plain-text and Markdown version of every page",
   "See how the API and the AI-connector (MCP) are secured, without needing an account"
  ],
  "cannot_do": [
   {
    "what": "Create a trial account",
    "why": "The sign-up form requires a phone number, and there is no other way to sign up."
   },
   {
    "what": "Get an API key or connect an AI assistant",
    "why": "Both are only created inside an account, by a human admin."
   },
   {
    "what": "Use any inbox, reply, ticket, or tagging feature",
    "why": "Every attempt without an account was rejected as unauthorized."
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Inbox & messaging",
   "capability": "Unify all channels into one shared inbox",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /conversations",
    "mcp": "search_conversations / list_inboxes",
    "cli": null,
    "ui": "Inbox view"
   },
   "check": "search_conversations with filters.inboxId returns messages originating from multiple channel types (email, chat, SMS) in one inbox",
   "source": "https://front.com/product/omnichannel-support-inbox; https://front.com/pricing"
  },
  {
   "id": "cap-02",
   "group": "Inbox & messaging",
   "capability": "Draft and send a reply on a conversation",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /conversations/{id}/messages",
    "mcp": "create_draft + send_message",
    "cli": null,
    "ui": "Conversation composer"
   },
   "check": "read_message on the sent draft shows draft_version cleared and message appears in read_conversation timeline as sent",
   "source": "https://dev.frontapp.com/docs/mcp-server; https://dev.frontapp.com/reference/introduction"
  },
  {
   "id": "cap-03",
   "group": "Inbox & messaging",
   "capability": "Archive or reopen a conversation / set ticket status",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /conversations/{id}",
    "mcp": "update_conversation_status",
    "cli": null,
    "ui": "Conversation toolbar"
   },
   "check": "read_conversation shows status transition entry (open->archived) in the timeline",
   "source": "https://front.com/product/ticketing-system; https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-04",
   "group": "Inbox & messaging",
   "capability": "Assign a conversation to a teammate",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PUT /conversations/{id}/assignee",
    "mcp": "assign_conversation",
    "cli": null,
    "ui": "Conversation assignee picker"
   },
   "check": "read_conversation shows assignee change event and new assigneeId matches requested teammate",
   "source": "https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-05",
   "group": "Ticketing",
   "capability": "Track and resolve requests as tickets",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET/PATCH /conversations (ticket statuses)",
    "mcp": "list_statuses / update_conversation_status",
    "cli": null,
    "ui": "Ticketing view"
   },
   "check": "list_statuses returns company ticket statuses and update_conversation_status with statusId reflects on the conversation record",
   "source": "https://front.com/product/ticketing-system; https://front.com/pricing"
  },
  {
   "id": "cap-06",
   "group": "AI automation",
   "capability": "Draft AI-assisted replies with Copilot",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Copilot panel in conversation"
   },
   "check": "Copilot-suggested draft appears attached to the conversation for agent review before send (observed in product UI, no public API)",
   "source": "https://front.com/product/copilot-ai-assistant; https://front.com/pricing"
  },
  {
   "id": "cap-07",
   "group": "AI automation",
   "capability": "Automate end-to-end resolution of complex requests with an AI agent (Autopilot)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Autopilot workflow builder"
   },
   "check": "conversation resolved by Autopilot shows AI-agent actions and final resolution status in the activity timeline, billed per conversation",
   "source": "https://front.com/product/autopilot-customer-service-automation; https://front.com/pricing"
  },
  {
   "id": "cap-08",
   "group": "AI automation",
   "capability": "Classify incoming contact reasons into AI Topics",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "AI Topics dashboard"
   },
   "check": "AI Topics report shows conversations auto-bucketed into topic categories without manual tagging",
   "source": "https://front.com/pricing"
  },
  {
   "id": "cap-09",
   "group": "Inbox & messaging",
   "capability": "Apply and remove tags on conversations",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /conversations/{id}/tags",
    "mcp": "tag_conversation",
    "cli": null,
    "ui": "Conversation tag picker"
   },
   "check": "list_tags shows the tag and read_conversation lists the tag after tag_conversation(addTags) call",
   "source": "https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-10",
   "group": "Ticketing",
   "capability": "Move a conversation to a different inbox",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /conversations/{id}",
    "mcp": "move_conversation",
    "cli": null,
    "ui": "Conversation overflow menu"
   },
   "check": "read_conversation shows inboxId changed to the destination inbox after move_conversation",
   "source": "https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-11",
   "group": "Collaboration",
   "capability": "Post an internal comment (not visible to customer) with @mentions",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /conversations/{id}/comments",
    "mcp": "add_comment",
    "cli": null,
    "ui": "Conversation comment pane"
   },
   "check": "read_conversation timeline shows the comment entry with resolved @mention, not present in the customer-facing message thread",
   "source": "https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-12",
   "group": "Collaboration",
   "capability": "Create and manage internal tasks",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /conversations (task type)",
    "mcp": "create_task / update_task",
    "cli": null,
    "ui": "Tasks view"
   },
   "check": "search_conversations with filters.type=task returns the created task, and update_task(status=resolved) marks it archived",
   "source": "https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-13",
   "group": "Search",
   "capability": "Full-text and filtered search across conversations",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /conversations/search",
    "mcp": "search_conversations",
    "cli": null,
    "ui": "Inbox search bar"
   },
   "check": "search_conversations with a query string returns matching conversations ranked/filtered by inbox, status, tag, date",
   "source": "https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-14",
   "group": "Automation",
   "capability": "Build routing/workflow automation rules and macros",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Core API rules endpoints",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Rules & Macros"
   },
   "check": "a configured rule auto-tags/routes a newly arriving conversation matching its trigger, visible in the conversation's rule-action log entry",
   "source": "https://front.com/pricing (plan limits: 10/20/unlimited rules)"
  },
  {
   "id": "cap-15",
   "group": "Self-service",
   "capability": "Publish and maintain a public/internal knowledge base",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Knowledge Base editor"
   },
   "check": "published article is retrievable at the public help-center URL and consumable by AI answer grounding",
   "source": "https://front.com/product/knowledge-base-for-ai-front; https://front.com/pricing"
  },
  {
   "id": "cap-16",
   "group": "Self-service",
   "capability": "Embed a live chat widget on a website",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Live chat settings + embed snippet"
   },
   "check": "a message sent via the embedded chat widget creates a new conversation in the connected inbox",
   "source": "https://front.com/product/live-chat; https://dev.frontapp.com/docs/welcome (Chat Widget)"
  },
  {
   "id": "cap-17",
   "group": "Quality & insight",
   "capability": "Run automated QA scorecards on conversations (Smart QA)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Smart QA dashboard"
   },
   "check": "a reviewed conversation shows an AI-generated scorecard with per-criterion scores attached to its QA record",
   "source": "https://front.com/product/smart-qa-automated-quality-assurance; https://front.com/pricing"
  },
  {
   "id": "cap-18",
   "group": "Quality & insight",
   "capability": "Infer customer satisfaction without surveys (Smart CSAT)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Smart CSAT dashboard"
   },
   "check": "resolved conversations without a survey response show an inferred CSAT score in reporting",
   "source": "https://front.com/product/smart-csat-ai-scoring; https://front.com/pricing"
  },
  {
   "id": "cap-19",
   "group": "Contacts",
   "capability": "Search and view contact records and linked handles",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /contacts",
    "mcp": "search_contacts / read_contact",
    "cli": null,
    "ui": "Contact sidebar"
   },
   "check": "read_contact returns the contact's name, handles, and linked account for an ID returned by search_contacts",
   "source": "https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-20",
   "group": "Contacts",
   "capability": "Search and view account (company) records",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /accounts",
    "mcp": "search_accounts / read_account",
    "cli": null,
    "ui": "Account view"
   },
   "check": "read_account returns the company record and its associated contacts for an account ID from search_accounts",
   "source": "https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-21",
   "group": "Developer platform",
   "capability": "Sync/manage Front data via the Core API (custom integrations)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "https://api2.frontapp.com (full Core API)",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "an authenticated API token can list, create, update, and delete resources (contacts, tags, conversations) and changes are reflected in the UI",
   "source": "https://dev.frontapp.com/docs/core-api-overview; https://dev.frontapp.com/reference/introduction"
  },
  {
   "id": "cap-22",
   "group": "Developer platform",
   "capability": "Receive real-time events via webhooks",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /webhooks (rule action)",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Developers > Webhooks"
   },
   "check": "a registered webhook endpoint receives a POST payload when a matching conversation event fires",
   "source": "https://dev.frontapp.com/docs/core-api-overview"
  },
  {
   "id": "cap-24",
   "group": "Developer platform",
   "capability": "Embed a custom side-panel plugin in the conversation view",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Conversation side-panel plugin drawer"
   },
   "check": "an installed Plugin SDK app renders custom content in the drawer when a matching conversation is opened",
   "source": "https://dev.frontapp.com/docs/welcome (Plugin SDK)"
  },
  {
   "id": "cap-25",
   "group": "Developer platform",
   "capability": "Add a custom inbound/outbound communication channel",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Channels API",
    "mcp": "list_channels (discovery only)",
    "cli": null,
    "ui": "Settings > Channels"
   },
   "check": "a message sent through the custom channel integration appears as a new conversation in the connected inbox",
   "source": "https://dev.frontapp.com/docs/welcome (Channels API)"
  },
  {
   "id": "cap-26",
   "group": "Reporting",
   "capability": "View analytics and reporting on team performance, CSAT, and SLAs",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /analytics",
    "mcp": null,
    "cli": null,
    "ui": "Analytics dashboard"
   },
   "check": "the Analytics dashboard renders volume, response-time, and CSAT metrics for a selected date range and team",
   "source": "https://front.com/pricing"
  },
  {
   "id": "cap-27",
   "group": "Org management",
   "capability": "List and manage teammates and teams",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /teammates, GET /teams",
    "mcp": "list_teammates / list_teams",
    "cli": null,
    "ui": "Settings > People"
   },
   "check": "list_teammates returns active teammates with roles matching the company's People settings page",
   "source": "https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-28",
   "group": "Org management",
   "capability": "Configure business hours per inbox",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "list_inboxes (business_hours_enabled filter)",
    "cli": null,
    "ui": "Inbox settings > Business hours"
   },
   "check": "list_inboxes with business_hours_enabled=true returns only inboxes with configured hours, matching the settings UI",
   "source": "https://dev.frontapp.com/docs/mcp-server"
  },
  {
   "id": "cap-29",
   "group": "Admin & security",
   "capability": "Configure SSO and SCIM provisioning",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Security"
   },
   "check": "a user provisioned via SCIM appears in the teammate list without manual invite, and SSO login bypasses password entry",
   "source": "https://front.com/pricing"
  },
  {
   "id": "cap-30",
   "group": "Admin & security",
   "capability": "Define custom roles and permissions",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Roles"
   },
   "check": "a teammate assigned a custom role is blocked from an action a permission bit restricts, confirmed by a 403 on API/MCP call",
   "source": "https://front.com/pricing"
  },
  {
   "id": "cap-31",
   "group": "Admin & security",
   "capability": "Create multiple workspaces to divide inboxes",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Workspaces"
   },
   "check": "an inbox created inside workspace B is not visible to a teammate scoped only to workspace A",
   "source": "https://front.com/pricing"
  },
  {
   "id": "cap-32",
   "group": "Admin & security",
   "capability": "Register and manage developer apps / OAuth credentials",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Company > Developer"
   },
   "check": "a created developer app yields a client_id/client_secret pair usable to mint an OAuth token against app.frontapp.com/oauth/token",
   "source": "https://dev.frontapp.com/docs/mcp-server (Set up the Front developer app)"
  },
  {
   "id": "cap-33",
   "group": "Admin & security",
   "capability": "Browse and install third-party integrations from the App Store",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Integrations marketplace"
   },
   "check": "installing a listed integration adds its channel/plugin to the account without custom code",
   "source": "https://front.com/integrations"
  }
 ],
 "attempts": [
  {
   "t": "02:43",
   "cap": "discovery",
   "capability": "MCP discover",
   "task": "POST server/discover 2026-07-28 to https://mcp.frontapp.com/mcp",
   "route": "mcp",
   "result": "blocked",
   "evidence": "401 {\"error\":\"Missing authentication token.\"} WWW-Authenticate: Bearer resource_metadata=\"https://mcp.frontapp.com/.well-known/oauth-protected-resource\"; docs say MCP spec version 2025-11-25",
   "quality": {
    "error_legibility": "clear"
   },
   "documented": true,
   "verified": false
  },
  {
   "t": "02:43",
   "cap": "discovery",
   "capability": "PRM and AS metadata",
   "task": "GET /.well-known/oauth-protected-resource on mcp.frontapp.com and AS metadata",
   "route": "api",
   "result": "done",
   "verified": true,
   "evidence": "PRM 200 JSON resource https://mcp.frontapp.com, AS https://app.frontapp.com; AS metadata 200: code+PKCE S256, grants authorization_code/refresh_token/client_credentials, no registration_endpoint, no client_id_metadata_document_supported, no device endpoint, no agent_auth. Docs: no DCR, confidential client id+secret required",
   "documented": true
  },
  {
   "t": "02:43",
   "cap": "discovery",
   "capability": "cards and well-known",
   "task": "GET ai-catalog, agent-card, agent.json, mcp server-card, /.well-known/ucp, /auth.md, /SKILL.md, <mcp>/server-card",
   "route": "api",
   "result": "failed",
   "evidence": "front.com all 404 HTML; /SKILL.md 308 -> /skill.md 404; mcp.frontapp.com/mcp/server-card 404 JSON No such route",
   "documented": true,
   "verified": false
  },
  {
   "t": "02:43",
   "cap": "discovery",
   "capability": "robots/aipref and markdown docs",
   "task": "robots.txt Content-Usage, Content-Usage header, Accept: text/markdown on dev.frontapp.com, .md URL, llms.txt",
   "route": "api",
   "result": "done",
   "verified": true,
   "evidence": "robots.txt: User-agent: * with Disallow lines only, no Content-Usage/Content-signal; no Content-Usage header. dev.frontapp.com/docs/welcome with Accept text/markdown -> 200 text/markdown, Vary: Accept; welcome.md -> 200 text/markdown. llms.txt at front.com/llms.txt and dev.frontapp.com/llms.txt (428 lines)",
   "documented": true
  },
  {
   "t": "09:07",
   "cap": "signup",
   "capability": "sign up for free trial",
   "task": "find a headless sign-up route",
   "route": "api",
   "result": "failed",
   "evidence": "No documented sign-up API (dev.frontapp.com/llms.txt lists none); GET https://app.frontapp.com/signup -> 302 /signin?redirect_url=%2Fsignup; signin page links Try for Free -> https://front.com/signup (web form)",
   "quality": {
    "docs_match": "undocumented"
   },
   "documented": true,
   "verified": false
  },
  {
   "t": "09:07",
   "cap": "signup",
   "capability": "sign up for free trial",
   "task": "submit the Try Front for free form (front.com/signup / pricing modal) as AgentDrives Test without a phone number",
   "route": "browser",
   "result": "blocked",
   "evidence": "Form fields: Work email, First name, Last name, Company, Job title, Industry, Phone number, Company size. Submit with email/name/company filled and phone empty shows inline error \"Phone number is required\" (also \"Job title is required\"); Submit stays disabled. No CAPTCHA signals (visible_challenge false). Screenshot browser/shots/postsubmit.png",
   "notes": "Our agent has no phone number; per rules we stop. The 14-day trial itself needs no card (pricing FAQ).",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   },
   "documented": true,
   "verified": false
  },
  {
   "t": "10:40",
   "cap": "docs",
   "capability": "find docs",
   "task": "read developer docs, llms.txt, OpenAPI",
   "route": "api",
   "result": "done",
   "verified": true,
   "evidence": "dev.frontapp.com/llms.txt (428 lines, .md per page, Accept: text/markdown served); OpenAPI github.com/frontapp/front-api-specs core-api/core-api.json openapi 3.0.0, 246 operations; MCP docs: https://mcp.frontapp.com/mcp, Streamable HTTP, spec 2025-11-25, OAuth with confidential client, no DCR; rate limits x-ratelimit-* from 50 req/min",
   "quality": {
    "docs_match": "match"
   },
   "documented": true
  },
  {
   "t": "10:40",
   "cap": "first_call",
   "capability": "first API call",
   "task": "unauthenticated GET https://api2.frontapp.com/me and POST /conversations to read errors",
   "route": "api",
   "result": "blocked",
   "evidence": "401 application/json {\"_error\":{\"status\":401,\"title\":\"Unauthenticated\",\"message\":\"JSON Web Token error\"}}; no Problem Details, status in body matches; no 402/payment headers",
   "notes": "credentials need an account (API token: Settings > Developers, admin only; OAuth app also created in Front settings)",
   "quality": {
    "error_legibility": "clear"
   },
   "documented": true,
   "verified": false
  },
  {
   "t": "10:40",
   "cap": "pay",
   "capability": "buy the product",
   "task": "probe 402/x402/MPP/UCP and registries",
   "route": "api",
   "result": "failed",
   "evidence": "api2.frontapp.com unauthenticated calls -> 401, no PAYMENT-REQUIRED / WWW-Authenticate: Payment; x402.front.com and mpp.front.com no DNS/connection; x402./mpp./agents.frontapp.com -> 302 /signin; agents.front.com is a Framer waitlist page for external AI agents; /.well-known/ucp 404; OpenAPI has no x-payment-info and no billing paths; not in mpp.dev/api/services or CDP x402 Bazaar. Pricing: Starter $25/seat/mo self-serve trial (14 days, no card per FAQ), Professional/Enterprise via demo; Enterprise annual only",
   "notes": "purchase only after a trial account exists, which needs a phone number; in-app checkout not observed",
   "documented": true,
   "verified": false
  },
  {
   "t": "10:40",
   "cap": "cap-01",
   "capability": "Unify all channels into one shared inbox",
   "task": "list inboxes and conversations",
   "route": "api",
   "result": "blocked",
   "evidence": "no account: trial sign-up requires a phone number; api2.frontapp.com and mcp.frontapp.com answer 401 without a token",
   "documented": true,
   "verified": false
  },
  {
   "t": "10:40",
   "cap": "cap-02",
   "capability": "Draft and send a reply on a conversation",
   "task": "create a draft reply to address",
   "route": "api",
   "result": "blocked",
   "evidence": "no account: trial sign-up requires a phone number; api2.frontapp.com and mcp.frontapp.com answer 401 without a token",
   "documented": true,
   "verified": false
  },
  {
   "t": "10:40",
   "cap": "cap-03",
   "capability": "Archive or reopen a conversation / set ticket status",
   "task": "archive then reopen a conversation",
   "route": "api",
   "result": "blocked",
   "evidence": "no account: trial sign-up requires a phone number; api2.frontapp.com and mcp.frontapp.com answer 401 without a token",
   "documented": true,
   "verified": false
  },
  {
   "t": "10:40",
   "cap": "cap-04",
   "capability": "Assign a conversation to a teammate",
   "task": "assign a conversation to ourselves",
   "route": "api",
   "result": "blocked",
   "evidence": "no account: trial sign-up requires a phone number; api2.frontapp.com and mcp.frontapp.com answer 401 without a token",
   "documented": true,
   "verified": false
  },
  {
   "t": "10:40",
   "cap": "cap-05",
   "capability": "Track and resolve requests as tickets",
   "task": "list ticket statuses and resolve a ticket",
   "route": "api",
   "result": "blocked",
   "evidence": "no account: trial sign-up requires a phone number; api2.frontapp.com and mcp.frontapp.com answer 401 without a token",
   "documented": true,
   "verified": false
  },
  {
   "t": "10:40",
   "cap": "cap-08",
   "capability": "Classify incoming contact reasons into AI Topics",
   "task": "read AI topic on a conversation",
   "route": "api",
   "result": "blocked",
   "evidence": "no account: trial sign-up requires a phone number; api2.frontapp.com and mcp.frontapp.com answer 401 without a token",
   "documented": true,
   "verified": false
  },
  {
   "t": "10:40",
   "cap": "cap-09",
   "capability": "Apply and remove tags on conversations",
   "task": "create a tag and apply/remove it",
   "route": "api",
   "result": "blocked",
   "evidence": "no account: trial sign-up requires a phone number; api2.frontapp.com and mcp.frontapp.com answer 401 without a token",
   "documented": true,
   "verified": false
  },
  {
   "t": "10:40",
   "cap": "cap-06",
   "capability": "Draft AI-assisted replies with Copilot",
   "task": "try Copilot/Autopilot",
   "route": "none",
   "result": "blocked",
   "evidence": "no account (phone required at sign-up); also listed as paid add-on on pricing page (AI add-ons available)",
   "documented": true,
   "verified": false
  },
  {
   "t": "10:41",
   "cap": "cap-07",
   "capability": "Automate end-to-end resolution of complex requests with an AI agent (Autopilot)",
   "task": "try Copilot/Autopilot",
   "route": "none",
   "result": "blocked",
   "evidence": "no account (phone required at sign-up); also listed as paid add-on on pricing page (AI add-ons available)",
   "documented": true,
   "verified": false
  },
  {
   "t": "11:19",
   "cap": "signup",
   "capability": "sign up for free developer account",
   "task": "follow docs link to free development account (frontapp.com/signup?affiliate=developers)",
   "route": "browser",
   "result": "blocked",
   "evidence": "dev.frontapp.com/docs/partnering-with-front.md links https://frontapp.com/signup?affiliate=developers; it 301-redirects to https://front.com/signup (affiliate param dropped), the same trial form with required Phone number field",
   "quality": {
    "recoverable": "no"
   },
   "documented": true,
   "verified": false
  }
 ],
 "stale": false,
 "icon": "/logos/front.png",
 "monitored": false,
 "verdict": "L1 · Needs a person: front.com/signup requires a phone number our agent didn't have, so it stopped there. No CAPTCHA blocked it; the form itself did. Docs are strong for an agent: llms.txt, Markdown pages, an OpenAPI spec and an official MCP server. But tokens and MCP OAuth clients are only made by an admin inside an account, with no sign-up API, no DCR and no device flow. With no account, no call, no core work and no purchase were reached: Front never let our agent past the door.",
 "page": "https://agentdrives.com/tools/front?via=api"
}