Can an AI agent use Plain (plain.com)?
As of 6 Oct 2026, an AI agent can't use Plain on its own: Cloudflare Turnstile on the sign-up page.
- Find: Some docs for agents: llms.txt and an MCP server.
- Access: Can't sign up.
- Use: Work not reached.
- Pay: Payment not reached.
- Leave: Leaving not reached.
To reach L2 · Gets in: let an agent sign up on its own.
With an account set up by a person: not measured yet.
What the levels meanDriven 6 Oct 2026Same level in 2 drives in a rowRules of 15 Oct 2026Claim this page
Written and checked by our agents from this drive's record. How we write.
Who gets in
- Agents on a serverTurned away when they send the sign-up form.
- Signed agentsNot checked: its robots.txt asks crawlers to stay off the sign-up page.
- Agents in a person's browserNot measured yet.
Sign-up page checked 13 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from
What an agent can do in Plain (plain.com).
On its own
- Read all of Plain's documentation and the full list of possible actions without an account
- See how Plain's AI login system is set up, without being able to use it
What it can't, and why
- Create an accountA visible human-verification check blocks the sign-up page
- Get an API key or use any feature (replying to customers, assigning conversations, etc.)All of these need an account first
- Cancel a plan or delete a workspaceNo plan or account was ever created to cancel or delete
Can an AI agent sign up for Plain on its own?
No. Sign-up: needs a human. Cloudflare managed challenge with visible Turnstile 'Verify you are human' on signin.auth.plain.com/sign-up; sign-in email path answered 'Access blocked, please contact support.'.
Does Plain (plain.com) have an MCP server, and can an agent connect to it?
Yes. Plain has an official MCP server. The server is hosted and signs an agent in with OAuth.
A new agent can't get in on its own: in the drive of 6 Oct 2026, our agent stopped at sign up (it needs a person). Through the MCP server, 0 of our agent's 2 attempts worked.
What the drive found
API–OpenAPIMCP · officialCLISDKllms.txtWebhooks–SandboxNot reached in this drive: the API key, deleting the account and paying. Every checkpoint, in detail
For the team behind Plain.
Where agents stop in Plain (plain.com) today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Let signed agents through sign-upStep-by-step guide
- Add an agent sign-up route ending in a keyStep-by-step guide
- Document how to delete a workspace
1 more fix
- Make the 401 say what to send
- Claim it free and reply next to the result.
- A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
- Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
Details
Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.
Already claimed it? Open it in your dashboard.
Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.
Embed the badge on your site
Behind the level.
Our agent couldn't get into Plain (plain.com), so the work, its reliability and the crash test aren't measured. The part scores are what it could judge from the outside.
Part scores · level history
Part scores
Agent-ready setup
- llms.txt: found
- OpenAPI: not found
- MCP server: found
- CLI: found
Not measured in this drive: Holds up, Docs match (part of an Audit).
Level history
- 1 Oct 2026L1Needs a person
- 6 Oct 2026L1Needs a person
For agents and builders.
The drive as data, every checkpoint and all 25 attempts.
How an agent connects · 4 tips
/api/tools/plain.json/tools/plain.mdMCP get_tool {"slug":"plain"}
- Use /docs/llms.txt and .md pages; Accept: text/markdown also works
- The full GraphQL schema is public at core-api.uk.plain.com/graphql/v1/schema.graphql: plan calls before you have a key
- A human must create the account and a machine-user API key (Settings > Machine Users); then use Authorization: Bearer plainApiKey_…
- MCP at mcp.plain.com/mcp uses OAuth; the AS supports CIMD and device flow
Every checkpoint, in detail · 9 checkpoints
- DocsHeadless/docs/llms.txt, .md pages, Accept: text/markdown negotiation and llms-full.txt all fetched headless
- Sign upNeeds a humanCloudflare managed challenge with visible Turnstile 'Verify you are human' on signin.auth.plain.com/sign-up; sign-in email path answered 'Access blocked, please contact support.'.
- VerifyNot reachedNot reached: no account
- KeyNot reachedAPI keys only via Settings > Machine Users in the web app; MCP needs OAuth login to a Plain account; no account
- First callNot reachedcore-api.uk.plain.com/graphql/v1 returns 401 {"message":"Unauthorized"} without a key
- First actionNot reachedNot reached: no credentials
- PayNot reachedNo 402 on API or paid paths; x402./mpp./agents. subdomains do not resolve; not listed in mpp.dev or x402 Bazaar; no /.well-known/ucp. Docs: 7-day trial without card; changeBillingPlan and createHyperlineBillingPortalSession documented. From docs only: no account to exercise it.
- CancelNot reachedNot reached: no plan started (signup blocked by Cloudflare Turnstile, no account). No cancel mutation in the schema; subscription would be managed in the Hyperline billing portal (docs only). from docs, not exercised.
- DeleteNot reachedNo account created. No deleteWorkspace mutation and no workspace-deletion doc; deleteUser fails for the only owner
The attempt log · 25 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| robots.txt / aipref: GET https://www.plain.com/robots.txt | api | done ✓ | 200 text/plain; User-agent: * Allow: /, explicit Allow for GPTBot, ClaudeBot etc.; no Content-Usage or Content-signal lines; no Content-Usage header |
| llms.txt: GET /llms.txt and /docs/llms.txt | api | done ✓ | Both 200 text/plain; /docs/llms.txt indexes every docs page as .md URL |
| markdown docs: GET /docs/graphql/authentication with Accept: text/markdown; .md URL | api | done ✓ | Accept: text/markdown -> 200 content-type text/markdown, vary: rsc, accept-encoding, Accept, User-Agent; .md URLs listed in llms.txt return markdown |
| well-known cards: GET /.well-known/ai-catalog.json, agent-card.json, ucp, oauth-protected-resource, /auth.md on www.plain.com | api | failed ✓ | All 404 (text/html) |
| MCP server/discover: POST server/discover 2026-07-28 to https://mcp.plain.com/mcp | mcp | partial ✓ | 401, WWW-Authenticate: Bearer resource_metadata="https://mcp.plain.com/.well-known/oauth-protected-resource/mcp", scope="openid offline_access" |
| MCP auth metadata: GET PRM and AS metadata | api | done ✓ | PRM: resource https://mcp.plain.com/mcp, authorization_servers [https://signin.auth.plain.com]. AS metadata: client_id_metadata_document_supported true, registration_endpoint (DCR), device_authorization_endpoint, grant device_code, S256 PKCE |
| Sign up: Open app.plain.com/signup -> WorkOS sign-up page in pw browser | browser | blocked ✓ | signin.auth.plain.com/sign-up shows Cloudflare managed challenge 'Performing security verification' with visible 'Verify you are human' Turnstile checkbox; did not clear after 12 s (screenshot browser/shots/003.png) |
| Sign up: Sign-in page 'Continue with email' with address (passwordless path) | browser | blocked ✓ | After submitting the agent's inbox the page shows 'Access blocked, please contact support.' (browser/shots/005.png) |
| Sign up: Human handoff (own browser) for the Cloudflare Turnstile on sign-up | none | blocked | |
| MCP initialize fallback: POST initialize offering 2026-07-28; GET /mcp/server-card | mcp | blocked ✓ | initialize -> 401 same WWW-Authenticate; /mcp/server-card -> 401 |
| GraphQL schema: GET https://core-api.uk.plain.com/graphql/v1/schema.graphql (linked from docs/graphql/schema) | api | done ✓ | 200 text/plain, 668,649 bytes: 238 queries, 352 mutations; includes replyToThread, createThread, assignThread, createMachineUser, createApiKey, changeBillingPlan, createHyperlineBillingPortalSession, createWorkspace, deleteUser; no deleteWorkspace |
| Docs: Read llms.txt, auth, MCP, SDK, pricing docs headless | api | done ✓ | /docs/llms.txt + .md pages + llms-full.txt (1,066,305 bytes) all fetched headless |
| Get API credentials: API key needs Settings > Machine Users in the web app; MCP needs OAuth login | none | blocked | docs/graphql/authentication.md: 'Go to Settings → Machine Users and click + Add Machine User' then 'Add API key'; no account because sign-up is behind Cloudflare Turnstile |
| First API call: POST createThread to core-api.uk.plain.com/graphql/v1 without credentials | api | blocked ✓ | 401 application/json {"message":"Unauthorized"} |
| Reply to a thread: Reply to a thread via GraphQL API / MCP | api | blocked | No account or API key: sign-up blocked by Cloudflare Turnstile (see signup); core-api returns 401 Unauthorized |
| Create a thread: Create a thread via GraphQL API / MCP | api | blocked | No account or API key: sign-up blocked by Cloudflare Turnstile (see signup); core-api returns 401 Unauthorized |
| Change thread status: Change thread status via GraphQL API / MCP | api | blocked | No account or API key: sign-up blocked by Cloudflare Turnstile (see signup); core-api returns 401 Unauthorized |
| Assign a thread: Assign a thread via GraphQL API / MCP | api | blocked | No account or API key: sign-up blocked by Cloudflare Turnstile (see signup); core-api returns 401 Unauthorized |
| Escalate a thread: Escalate a thread via GraphQL API / MCP | api | blocked | No account or API key: sign-up blocked by Cloudflare Turnstile (see signup); core-api returns 401 Unauthorized |
| Ari resolves conversations: Ari resolves conversations via GraphQL API / MCP | api | blocked | No account or API key: sign-up blocked by Cloudflare Turnstile (see signup); core-api returns 401 Unauthorized |
| Sidekick in a thread: Sidekick in a thread via GraphQL API / MCP | api | blocked | No account or API key: sign-up blocked by Cloudflare Turnstile (see signup); core-api returns 401 Unauthorized |
| Workflows: Workflows via GraphQL API / MCP | api | blocked | No account or API key: sign-up blocked by Cloudflare Turnstile (see signup); core-api returns 401 Unauthorized |
| Pay step: Probe 402s, well-known, registries, billing docs | api | done ✓ | core-api 401 not 402 on paid paths; x402./mpp./agents.plain.com do not resolve; /.well-known/ucp, /auth.md, /openapi.json 404; not in mpp.dev services or x402 Bazaar; pricing.md: 'Every plan starts with a free 7-day trial, and the trial doesn't need a credit card'; GraphQL documents changeBillingPlan, previewBillingPlanChange, createHyperlineBillingPortalSession ('returns a URL where the user can manage their subscription, invoices, and payment methods') |
| Cancel: Find a documented cancel route | api | skipped | No plan started (no account). Docs: changeBillingPlan mutation and Hyperline billing portal; no cancel mutation in schema |
| Delete account: Find a documented workspace/account delete route | api | skipped | No account created. Schema has deleteUser ('Returns an error if the user is the only owner of the workspace') but no deleteWorkspace; llms-full.txt has no workspace-deletion page |
Also in Customer support.
IntercomL1Can't get in on its ownPlain vs Intercom
ChatwootL1Can't sign up on its ownPlain vs Chatwoot
CrispL1Can't sign up on its ownPlain vs Crisp
FreshdeskL1Can't sign up on its ownPlain vs Freshdesk