{
 "slug": "folk",
 "name": "folk",
 "url": "https://folk.app",
 "domain": "folk.app",
 "category": "crm",
 "category_name": "CRM",
 "tested_at": "2026-10-06",
 "run": "20261006T072501Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T213915Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": null,
    "robots": "start"
   }
  },
  {
   "run": "20261006T072501Z",
   "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": "verify"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "left": "stuck"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "verify",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "left": "stuck",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent verify its account on its own"
 },
 "stop": "verify",
 "core": "0/10",
 "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": "current",
    "behind": null,
    "value": "cimd"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.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": {
  "rung": "verify",
  "vendor": "Stytch Device Fingerprinting (magic-link redirect)",
  "visible": false,
  "type": "network",
  "human": null,
  "how": "Use Stytch's Web Bot Auth verification to let signed agents through device fingerprinting.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "form"
  },
  "signed": {
   "state": "page",
   "kind": "home",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "developer.folk.app: llms.txt index, .md pages, Accept: text/markdown negotiation, OpenAPI 3.1.0 (36 paths), MCP docs."
  },
  "signup": {
   "status": "browser",
   "note": "No sign-up API. Web form app.folk.app/login > Continue with email accepted the agent's inbox and sent a Stytch magic link. No bot check on the form."
  },
  "verify": {
   "status": "blocked",
   "note": "Magic link opens a Stytch Device Fingerprinting page; POST /v1/magic_links/redirect/dfp returned 200 with an empty body and the browser landed on stytch.com/redirect-error ('Login Error'). Two links, same result."
  },
  "credentials": {
   "status": "",
   "note": "API keys only in app Settings > API; MCP OAuth (DCR worked: 201 client_id) sends the authorize step to app.folk.app/login, behind the same blocked magic link. No device flow.",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "GET api.folk.app/v1/groups without a key -> 401 UNAUTHORIZED with a clear message; no key obtainable.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "No session or credential.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P2",
   "rails": [
    "in-app card checkout (Settings > Plans)"
   ],
   "rail_ids": [
    "card"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No 402, x402/MPP/UCP or payment discovery (x402./mpp./agents. do not resolve, /.well-known/ucp 404, no x-payment-info). Pricing FAQ: 2-week trial without a card; 'We only accept credit cards'; upgrade in Settings > Plans. Checkout not seen (no login), so rests on the pricing page only.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "grade": "X5",
   "note": "Nothing started: the trial needs no card and lapses on its own (pricing FAQ: account blocked after 2 weeks).",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "Web/mobile only (help article 5701307: Settings > Workspace details); no API. Not reachable without a login; an unverified Stytch user for our address remains.",
   "left": "stuck",
   "account": true,
   "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": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST, 36 paths, Bearer API key; Premium feature per pricing (trial includes it)",
  "openapi": "3.1.0 at developer.folk.app/schemas/2025-06-09.json",
  "mcp": "official, Streamable HTTP, OAuth via Stytch (CIMD + DCR)",
  "llms_txt": "developer.folk.app/llms.txt indexes every API and MCP page as .md"
 },
 "can_do": [
  "Read the full API and MCP docs as Markdown (llms.txt, .md URLs, Accept: text/markdown)",
  "Fetch the OpenAPI 3.1.0 spec",
  "Register an OAuth client for the MCP server headlessly (DCR)",
  "Start a sign-up with an email address in the browser"
 ],
 "cannot_do": [
  {
   "what": "Log in after sign-up",
   "why": "Stytch Device Fingerprinting on the magic-link redirect rejects the signed, automated browser (empty /dfp response, 'Login Error')"
  },
  {
   "what": "Get an API key or MCP token",
   "why": "Both need a logged-in session"
  },
  {
   "what": "Any CRM action (people, companies, deals, pipelines)",
   "why": "No credential"
  },
  {
   "what": "Delete the account",
   "why": "Web/mobile only, and login is blocked"
  }
 ],
 "blockers": [
  "Stytch Device Fingerprinting rejects the magic-link login for an automated browser"
 ],
 "tips_for_owner": [
  "Let verified agents through the magic link",
  "Offer an email code next to the magic link",
  "Add device flow or API-key sign-up for agents",
  "Add an account deletion endpoint",
  "Publish an MCP server card"
 ],
 "tips_for_agents": [
  "Docs: start at developer.folk.app/llms.txt; every page has a .md twin.",
  "MCP at https://mcp.folk.app/mcp uses OAuth via api.stytch.folk.app (CIMD or DCR, PKCE S256); you need a logged-in human for consent.",
  "API: Bearer API key from Settings > API; rate limits 20 req/2 s burst and 600/min.",
  "Sign-up is passwordless (magic link or Google); the magic link runs a Stytch device-fingerprint check that rejected our agent's browser."
 ],
 "selfhost": null,
 "summary": "folk documents its API and official MCP server well (llms.txt, Markdown pages, OpenAPI 3.1.0, PRM and CIMD/DCR on the MCP OAuth). An agent can start sign-up in the browser, but the emailed magic link runs Stytch Device Fingerprinting, which rejected our agent's browser twice with a 'Login Error'. Without a session there is no API key or MCP token, so no CRM capability could be driven.",
 "wall": "Stytch fingerprint check blocks magic-link login",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "folk is a CRM with good developer docs and an official API/MCP server, but a new agent cannot get past the email sign-up step: the login link triggers an invisible bot-detection check that rejected the automated browser every time.",
  "can_do": [
   "Read all the product's technical documentation automatically",
   "Fetch the full list of API capabilities",
   "Register itself as an app allowed to connect later",
   "Start creating an account by submitting an email address"
  ],
  "cannot_do": [
   {
    "what": "Finish logging in",
    "why": "An invisible fraud check on the email link rejected the automated browser"
   },
   {
    "what": "Get a key to use the API or AI integration",
    "why": "Both require being logged in first"
   },
   {
    "what": "Create or manage any contacts, companies, or deals",
    "why": "No account access was ever obtained"
   },
   {
    "what": "Delete the account",
    "why": "Deletion is only in the web app, which needs the blocked login"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "People & Companies",
   "capability": "Create, update, and delete a contact (person)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST/PATCH/DELETE /v1/people",
    "mcp": "folk_create_person, folk_update_person, folk_search_people, folk_get_person",
    "cli": null,
    "ui": "People table/record view"
   },
   "check": "GET /v1/people/{id} returns the new name/email, or 404 after delete",
   "source": "https://developer.folk.app/api-reference/people/create-a-person; https://developer.folk.app/core-concepts/people; https://help.folk.app/en/articles/9790806-folk-data-model"
  },
  {
   "id": "cap-02",
   "group": "People & Companies",
   "capability": "Create, update, and delete a company",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST/PATCH/DELETE /v1/companies",
    "mcp": "folk_create_company, folk_update_company, folk_search_companies, folk_get_company",
    "cli": null,
    "ui": "Companies table/record view"
   },
   "check": "GET /v1/companies/{id} returns the updated field, or 404 after delete",
   "source": "https://developer.folk.app/api-reference/companies/create-a-company; https://developer.folk.app/core-concepts/companies"
  },
  {
   "id": "cap-03",
   "group": "Deals",
   "capability": "Create, update, and close a deal with a value",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST/PATCH/DELETE /v1/deals",
    "mcp": "folk_search_objects (objects incl. deals)",
    "cli": null,
    "ui": "Deals board/record view"
   },
   "check": "GET /v1/deals/{id} shows updated stage/amount fields",
   "source": "https://developer.folk.app/api-reference/deals/create-a-deal; https://developer.folk.app/core-concepts/deals; https://www.folk.app/pricing (Custom objects & Deals = Premium)"
  },
  {
   "id": "cap-04",
   "group": "Pipeline",
   "capability": "Organize records into a pipeline with stages/views",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/groups (pipeline views), folk_get_workspace_structure",
    "mcp": "folk_get_workspace_structure",
    "cli": null,
    "ui": "Pipeline/Kanban view per group"
   },
   "check": "UI pipeline view shows the record under the stage column it was moved to; folk_get_workspace_structure lists the pipeline views",
   "source": "https://help.folk.app/en/articles/6044821-create-custom-pipeline-views; https://www.folk.app/pricing"
  },
  {
   "id": "cap-05",
   "group": "Messaging",
   "capability": "Send an email campaign to a list",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Messages > Campaign"
   },
   "check": "Campaign analytics page shows sent/opened counts for the campaign",
   "source": "https://www.folk.app/ (meta description: 'Prospect, engage, and close deals'); https://help.folk.app/en/articles/5779445-send-messages; https://www.folk.app/pricing (Email campaigns = Standard)"
  },
  {
   "id": "cap-06",
   "group": "Messaging",
   "capability": "Send a multi-step automated email sequence",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Messages > Sequences"
   },
   "check": "Sequence detail page shows step status (sent/scheduled) per recipient",
   "source": "https://help.folk.app/en/articles/8744016-send-email-sequences; https://www.folk.app/pricing (Email sequences = Premium)"
  },
  {
   "id": "cap-07",
   "group": "Intelligence",
   "capability": "Enrich a contact to find a missing email",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Person record > Enrich"
   },
   "check": "Person record's email field is populated after running enrichment",
   "source": "https://help.folk.app/en/articles/6804416-data-enrichment; https://www.folk.app/pricing (Find emails (enrichment): 500/month Standard, 1,000/month Premium)"
  },
  {
   "id": "cap-08",
   "group": "Intelligence",
   "capability": "Auto-fill a custom field with AI (Magic field)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Custom field > Magic field (AI)"
   },
   "check": "The custom field value on the record updates to the AI-generated value",
   "source": "https://help.folk.app/en/articles/7325564-magic-fields; https://www.folk.app/pricing (Magic fields (AI))"
  },
  {
   "id": "cap-09",
   "group": "Capture",
   "capability": "Sync email, calendar, and WhatsApp accounts to auto-log interactions",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Account sync"
   },
   "check": "A sent email/meeting appears automatically in the contact's interaction timeline",
   "source": "https://help.folk.app/en/collections/6732090-email-sync; https://www.folk.app/pricing (Email, calendar & WhatsApp sync; Accounts sync: 1/member Standard, 5/member Premium)"
  },
  {
   "id": "cap-10",
   "group": "Capture",
   "capability": "Capture a contact from LinkedIn/web via the folkX Chrome extension",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "folkX Chrome extension"
   },
   "check": "New person record appears in workspace with LinkedIn profile URL after using the extension",
   "source": "https://help.folk.app/en/articles/5817463-download-folkx-extension; https://www.folk.app/pricing (LinkedIn extension)"
  },
  {
   "id": "cap-11",
   "group": "Organization",
   "capability": "Group records and build custom table/pipeline views with filters",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/groups",
    "mcp": "folk_get_workspace_structure",
    "cli": null,
    "ui": "Group & Views"
   },
   "check": "A new saved view appears in the sidebar and filters the record list as configured",
   "source": "https://help.folk.app/en/articles/4998224-create-views; https://developer.folk.app/core-concepts/groups"
  },
  {
   "id": "cap-12",
   "group": "Organization",
   "capability": "Import contacts/companies from CSV and export records to CSV",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Group > Import/Export"
   },
   "check": "Imported rows appear as new records; exported CSV file contains the current record set",
   "source": "https://help.folk.app/en/articles/5865891-file-imports; https://www.folk.app/pricing (Import/Export CSV)"
  },
  {
   "id": "cap-13",
   "group": "Organization",
   "capability": "Auto-merge duplicate contacts",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Duplicates"
   },
   "check": "Two records with matching email collapse into a single merged record",
   "source": "https://help.folk.app/en/articles/5007403-manage-duplicates; https://www.folk.app/pricing (Auto-merge contacts)"
  },
  {
   "id": "cap-14",
   "group": "Interactions",
   "capability": "Log an interaction (call, meeting, note) on a person or company",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/interactions",
    "mcp": null,
    "cli": null,
    "ui": "Record > Log interaction"
   },
   "check": "GET (beta) /v1/interactions shows the new interaction linked to the record",
   "source": "https://developer.folk.app/api-reference/interactions/create-an-interaction; https://help.folk.app/en/articles/7012167-log-a-new-interaction"
  },
  {
   "id": "cap-15",
   "group": "Interactions",
   "capability": "Create and complete a task/reminder on a record",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/tasks, PATCH /v1/tasks/{id}/mark-as-done",
    "mcp": null,
    "cli": null,
    "ui": "Record > Tasks"
   },
   "check": "GET /v1/tasks/{id} shows status 'done' after marking complete",
   "source": "https://developer.folk.app/api-reference/tasks/create-a-task; https://developer.folk.app/api-reference/tasks/mark-a-task-as-done; https://developer.folk.app/migrations/reminders-to-tasks"
  },
  {
   "id": "cap-16",
   "group": "Messaging",
   "capability": "Save and reuse message templates (incl. LinkedIn/Gmail templates)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Messages > Templates"
   },
   "check": "A composed message prefilled from the saved template matches the template content",
   "source": "https://help.folk.app/en/articles/6573940-messages-templates; https://www.folk.app/pricing (Save and use templates)"
  },
  {
   "id": "cap-17",
   "group": "Messaging",
   "capability": "View campaign/sequence analytics",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Messages > Analytics"
   },
   "check": "Analytics panel shows open/click/reply counts matching sent messages",
   "source": "https://help.folk.app/en/articles/6657477-messaging-analytics; https://www.folk.app/pricing (Campaign analytics)"
  },
  {
   "id": "cap-18",
   "group": "Reporting",
   "capability": "Build a dashboard of pipeline/record metrics",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboards"
   },
   "check": "Dashboard widget value updates when the underlying deal/record data changes",
   "source": "https://help.folk.app/en/articles/9867508-dashboards-beta; https://www.folk.app/pricing (Dashboards = Premium)"
  },
  {
   "id": "cap-19",
   "group": "Automation",
   "capability": "Create a webhook subscribed to workspace events",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v1/webhooks",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Webhooks"
   },
   "check": "GET /v1/webhooks/{id} shows the subscription; triggering the event delivers a payload to the target URL",
   "source": "https://developer.folk.app/webhooks/about; https://developer.folk.app/api-reference/webhooks/create-a-webhook"
  },
  {
   "id": "cap-20",
   "group": "Automation",
   "capability": "Read and write workspace data via REST API",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "all /v1/* endpoints",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "An authenticated request with an API key returns workspace data (e.g. GET /v1/people)",
   "source": "https://developer.folk.app/api-reference/overview; https://developer.folk.app/api-reference/authentication; https://www.folk.app/pricing (API access = Premium)"
  },
  {
   "id": "cap-22",
   "group": "Collaboration",
   "capability": "Share a list/view with teammates",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "View > Share"
   },
   "check": "A teammate without prior access can now open the shared view and see its records",
   "source": "https://help.folk.app/en/articles/6505030-share-a-view; https://www.folk.app/pricing (Share lists)"
  },
  {
   "id": "cap-23",
   "group": "Collaboration",
   "capability": "Add notes and @mention teammates on a record",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/notes",
    "mcp": null,
    "cli": null,
    "ui": "Record > Notes"
   },
   "check": "GET /v1/notes/{id} returns the note content; mentioned teammate receives a notification",
   "source": "https://developer.folk.app/api-reference/notes/create-a-note; https://help.folk.app/en/articles/5007332-adding-notes"
  },
  {
   "id": "cap-24",
   "group": "Mobile",
   "capability": "Scan a business card to create a contact",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "folk mobile app"
   },
   "check": "A new person record is created with name/company parsed from the scanned card image",
   "source": "https://help.folk.app/en/articles/15899222-scan-a-business-card; https://www.folk.app/mobile"
  },
  {
   "id": "cap-25",
   "group": "Mobile",
   "capability": "Record a voice note attached to a contact",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "folk mobile app"
   },
   "check": "The recorded voice note (or its transcript) appears on the contact's interaction/notes timeline",
   "source": "https://help.folk.app/en/articles/15899229-record-a-voice-note; https://www.folk.app/mobile"
  },
  {
   "id": "cap-26",
   "group": "AI Assistants",
   "capability": "Get an AI-generated research brief on a contact/company (Research Assistant)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "folk assistants > Research Assistant"
   },
   "check": "Research Assistant output panel populates with a written brief citing sourced facts about the record",
   "source": "https://help.folk.app/en/articles/12326202-research-assistant; https://www.folk.app/pricing (Research Assistant: 200/month Standard & Premium)"
  },
  {
   "id": "cap-27",
   "group": "AI Assistants",
   "capability": "Run AI workflow automations across records (Workflow Assistant)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "folk assistants > Workflow Assistant"
   },
   "check": "Configured workflow runs and its action log shows records updated/created per the rule",
   "source": "https://help.folk.app/en/articles/13051876-workflow-assistant; https://www.folk.app/pricing (Workflow Assistant: 1,500/month Standard, 10,000/month Premium)"
  },
  {
   "id": "cap-28",
   "group": "AI Assistants",
   "capability": "Get AI follow-up suggestions on stale contacts (Follow-up Assistant)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "folk assistants > Follow-up Assistant"
   },
   "check": "Follow-up Assistant surfaces a list of contacts with suggested next action text",
   "source": "https://help.folk.app/en/articles/10304768-follow-up-assistant; https://www.folk.app/pricing (Follow-up Assistant)"
  },
  {
   "id": "cap-29",
   "group": "AI Assistants",
   "capability": "Get an AI recap of recent interactions (Recap Assistant)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "folk assistants > Recap Assistant"
   },
   "check": "Recap Assistant output summarizes the record's logged interactions into a short written recap",
   "source": "https://help.folk.app/en/articles/12893225-recap-assistant; https://www.folk.app/pricing (Recap Assistant)"
  },
  {
   "id": "cap-30",
   "group": "Organization",
   "capability": "Define custom fields on people, companies, deals, or custom objects",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/group-custom-fields",
    "mcp": "folk_get_workspace_structure (lists field defs)",
    "cli": null,
    "ui": "Group settings > Fields"
   },
   "check": "GET /v1/group-custom-fields/{id} returns the new field; the field appears as an editable column on records",
   "source": "https://developer.folk.app/api-reference/group-custom-fields/create-a-group-custom-field; https://developer.folk.app/core-concepts/custom-fields"
  },
  {
   "id": "cap-31",
   "group": "Admin",
   "capability": "Set workspace roles and per-group permissions for teammates",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Roles & permissions"
   },
   "check": "A teammate assigned a restricted role loses edit access to the group as configured",
   "source": "https://help.folk.app/en/articles/10063725-workspace-roles-permissions; https://www.folk.app/pricing (Workspace roles = Premium, Group-level permissions = Enterprise)"
  },
  {
   "id": "cap-32",
   "group": "Admin",
   "capability": "Configure security controls for internal/sensitive interactions",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Security"
   },
   "check": "An interaction marked sensitive is hidden from users without the sensitive-interactions permission",
   "source": "https://help.folk.app/en/articles/13056598-security-internal-and-sensitive-interactions; https://www.folk.app/pricing (Security controls = Enterprise)"
  },
  {
   "id": "cap-33",
   "group": "Admin",
   "capability": "Sign in via Google SSO",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Login page"
   },
   "check": "Login via Google OAuth redirect succeeds and lands in the workspace",
   "source": "https://www.folk.app/pricing (SSO: Google, all plans)"
  },
  {
   "id": "cap-35",
   "group": "Admin",
   "capability": "Use the white-glove migration service to move data from another CRM",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "folk.app/migrate-my-crm (assisted onboarding)"
   },
   "check": "Workspace contains records imported from the source CRM after the migration engagement completes",
   "source": "https://www.folk.app/migrate-my-crm; https://www.folk.app/pricing (Migration service = Standard & Premium)"
  },
  {
   "id": "cap-36",
   "group": "Admin",
   "capability": "Add a custom sending domain for outbound email",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Domains"
   },
   "check": "Outbound campaign emails show the custom domain in the From address after domain authentication completes",
   "source": "https://help.folk.app/en/articles/6380286-how-to-authenticate-a-domain; https://www.folk.app/pricing (Custom domains: 1 Standard, 3 Premium)"
  }
 ],
 "attempts": [
  {
   "t": "01:03",
   "cap": "discovery",
   "capability": "agent discovery",
   "route": "none",
   "documented": true,
   "verified": true,
   "task": "robots.txt + Content-Usage",
   "result": "done",
   "evidence": "www.folk.app/robots.txt 200: User-agent * Allow /, explicit Allow for GPTBot/ClaudeBot etc; Disallow only for SEO bots. No Content-Usage or Content-signal lines; no Content-Usage response header."
  },
  {
   "t": "01:03",
   "cap": "discovery",
   "capability": "agent discovery",
   "route": "none",
   "documented": true,
   "verified": true,
   "task": "llms.txt",
   "result": "done",
   "evidence": "https://www.folk.app/llms.txt (marketing) and https://developer.folk.app/llms.txt (full API+MCP index, links .md pages and OpenAPI /schemas/2025-06-09.json)"
  },
  {
   "t": "01:03",
   "cap": "discovery",
   "capability": "agent discovery",
   "route": "none",
   "documented": true,
   "verified": true,
   "task": "markdown docs",
   "result": "done",
   "evidence": "developer.folk.app/guides/quick-start with Accept: text/markdown -> content-type text/markdown, vary includes Accept; .md URLs also work"
  },
  {
   "t": "01:03",
   "cap": "discovery",
   "capability": "agent discovery",
   "route": "none",
   "documented": true,
   "verified": true,
   "task": "OpenAPI",
   "result": "done",
   "evidence": "https://developer.folk.app/schemas/2025-06-09.json openapi 3.1.0, 36 paths, server https://api.folk.app; no x-payment-info"
  },
  {
   "t": "01:11",
   "cap": "discovery",
   "capability": "agent discovery",
   "documented": true,
   "verified": true,
   "route": "mcp",
   "task": "MCP server/discover 2026-07-28",
   "result": "failed",
   "evidence": "POST https://mcp.folk.app/mcp server/discover unauthenticated -> 401 WWW-Authenticate Bearer resource_metadata=https://mcp.folk.app/.well-known/oauth-protected-resource/mcp; body JSON-RPC -32001 Unauthorized",
   "notes": "auth required before discover; retry with token later"
  },
  {
   "t": "01:11",
   "cap": "discovery",
   "capability": "agent discovery",
   "documented": true,
   "verified": true,
   "route": "mcp",
   "task": "PRM + AS metadata",
   "result": "done",
   "evidence": "PRM 200 JSON: resource https://mcp.folk.app/mcp, authorization_servers [https://api.stytch.folk.app]. AS metadata 200: client_id_metadata_document_supported true, registration_endpoint (DCR) present, S256 PKCE, iss param supported, authorization_endpoint https://app.folk.app/oauth/authorize; no device_authorization_endpoint, no agent_auth block"
  },
  {
   "t": "01:11",
   "cap": "discovery",
   "capability": "agent discovery",
   "documented": true,
   "verified": true,
   "route": "none",
   "task": "server card / ai-catalog / A2A cards",
   "result": "failed",
   "evidence": "mcp.folk.app/mcp/server-card 404 (-32601); www.folk.app and developer.folk.app /.well-known/ai-catalog.json 404; /.well-known/agent-card.json and agent.json 404"
  },
  {
   "t": "01:11",
   "cap": "pay",
   "capability": "pay step probes",
   "task": "402 / agent payment discovery",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "x402./mpp./agents.folk.app do not resolve; /.well-known/ucp 404; /auth.md, /SKILL.md 404; api.folk.app unauth -> 401 JSON not 402; OpenAPI has no x-payment-info. Pricing page: 2-week trial, no card; 'We only accept credit cards'; upgrade via Settings > Plans"
  },
  {
   "t": "01:40",
   "cap": "signup",
   "capability": "sign up",
   "task": "find headless sign-up",
   "route": "none",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "Docs quick-start: 'Create a folk account ... Sign up here (https://app.folk.app/login)'; no sign-up API, no auth.md, AS has no agent_auth/device flow. Only web form (Google or email).",
   "quality": {
    "error_legibility": "n/a"
   }
  },
  {
   "t": "02:28",
   "cap": "signup",
   "capability": "sign up",
   "task": "sign up via web form",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "app.folk.app/login > Continue with email > entered the agent's inbox > 'Check your email'. Passwordless (Stytch magic link); no bot check seen",
   "quality": {
    "error_legibility": "n/a"
   }
  },
  {
   "t": "04:37",
   "cap": "verify",
   "capability": "verify email / first login",
   "task": "open magic link from inbox in drive browser",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Two magic links (mails 07:27:28 and 07:28:14). stytch.com/v1/magic_links/redirect serves a Stytch Device Fingerprinting page: telemetry.js loads, POST eml.stytch.com/submit 200, then POST stytch.com/v1/magic_links/redirect/dfp returns 200 with an empty body; the page's JSON parse fails and it navigates to stytch.com/redirect-error 'Login Error. There was an error logging you in.' No visible challenge.",
   "notes": "Invisible bot check (Stytch DFP) rejected our agent's browser. Did not use the redirect_url visible in the page source (that would bypass the check).",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   }
  },
  {
   "t": "05:07",
   "cap": "credentials",
   "capability": "API key / OAuth token",
   "task": "get API key (Settings > API) or MCP OAuth token",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "API keys only in app settings (developer.folk.app/api-reference/authentication). MCP OAuth: DCR POST api.stytch.folk.app/v1/oauth2/register -> 201 client_id; authorize URL https://app.folk.app/oauth/authorize redirects to /login, which needs the blocked magic link. No device flow.",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable.",
   "quality": {
    "error_legibility": "n/a"
   }
  },
  {
   "t": "05:07",
   "cap": "first_call",
   "capability": "first API call",
   "task": "GET https://api.folk.app/v1/groups",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Without key -> 401 application/json {error:{code:UNAUTHORIZED,message:'No authorization header found...',documentationUrl,requestId}} (clear, not problem+json)",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable.",
   "quality": {
    "error_legibility": "clear"
   }
  },
  {
   "t": "05:07",
   "cap": "discovery",
   "capability": "agent discovery",
   "route": "mcp",
   "documented": true,
   "task": "MCP tools/list",
   "result": "blocked",
   "verified": true,
   "evidence": "mcp.folk.app/mcp requires OAuth token; server/discover answered 401 before any version negotiation",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "cap-01",
   "capability": "Create, update, and delete a contact (person)",
   "task": "Create, update, and delete a contact (person) in our trial workspace",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no session or credential",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "cap-02",
   "capability": "Create, update, and delete a company",
   "task": "Create, update, and delete a company in our trial workspace",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no session or credential",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "cap-03",
   "capability": "Create, update, and close a deal with a value",
   "task": "Create, update, and close a deal with a value in our trial workspace",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no session or credential",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "cap-04",
   "capability": "Organize records into a pipeline with stages/views",
   "task": "Organize records into a pipeline with stages/views in our trial workspace",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no session or credential",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "cap-05",
   "capability": "Send an email campaign to a list",
   "task": "Send an email campaign to a list in our trial workspace",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no session or credential",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "cap-06",
   "capability": "Send a multi-step automated email sequence",
   "task": "Send a multi-step automated email sequence in our trial workspace",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no session or credential",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "cap-07",
   "capability": "Enrich a contact to find a missing email",
   "task": "Enrich a contact to find a missing email in our trial workspace",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no session or credential",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "cap-08",
   "capability": "Auto-fill a custom field with AI (Magic field)",
   "task": "Auto-fill a custom field with AI (Magic field) in our trial workspace",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no session or credential",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "cap-09",
   "capability": "Sync email, calendar, and WhatsApp accounts to auto-log interactions",
   "task": "Sync email, calendar, and WhatsApp accounts to auto-log interactions in our trial workspace",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no session or credential",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "cap-10",
   "capability": "Capture a contact from LinkedIn/web via the folkX Chrome extension",
   "task": "Capture a contact from LinkedIn/web via the folkX Chrome extension in our trial workspace",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no session or credential",
   "notes": "Blocked at email verification: Stytch Device Fingerprinting rejected the magic-link login, so no session, no API key and no MCP OAuth consent are reachable."
  },
  {
   "t": "05:07",
   "cap": "delete",
   "capability": "delete account",
   "task": "delete account and data",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account deletion endpoint in OpenAPI (36 paths: people, companies, groups, deals, objects, notes, tasks, reminders, interactions, webhooks, users read-only). Could not log in to try the web UI.",
   "notes": "An unverified Stytch user for the agent's inbox exists (user_id in the magic-link page); it could not be removed."
  },
  {
   "t": "05:22",
   "cap": "delete",
   "capability": "delete account",
   "task": "find documented delete route",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "help.folk.app/en/articles/5701307: 'To delete your account, go to Settings > Workspace details where you can delete your workspace and all associated data' (web/desktop) or mobile Settings > Delete account. Web-only; not reachable without a login."
  }
 ],
 "stale": false,
 "icon": "/logos/folk.png",
 "monitored": false,
 "verdict": "Gets in only with a person: L1 · Needs a person. Our agent started sign-up itself at app.folk.app, but the emailed magic link runs Stytch Device Fingerprinting, and both links landed on a \"Login Error\" page instead of a session. Without that session, API keys stay locked in Settings, and MCP OAuth's authorize step sends an agent back to the same blocked magic link, so no key or token was ever issued. No CRM work was done through API, MCP or CLI. Docs are thorough: llms.txt, Markdown pages, OpenAPI, MCP guides. Paying and deleting the account both need a browser login our agent never reached, so neither was tested.",
 "page": "https://agentdrives.com/tools/folk?via=api"
}