Can an AI agent use Craft (craft.do)?

As of 6 Oct 2026, an AI agent gets into Craft on its own and does 78% of the core work.

Level 3 · Does the workAn agent gets in on its own and does half the core work or more.
  • Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
  • Access: Sign-up in a browser.
  • Use: 78% of the work.
  • Pay: Reaches the checkout: Stopped at the card form.
  • Leave: Leaves on its own: Nothing to cancel, deletes its account.

To reach L4 · Runs on its own: do 80% of the core work (now 78%).

What the levels mean

Driven 6 Oct 20261 drive so farRules 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 serverGet in on their own.
  • Signed agentsThe site opens.
  • 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 Craft (craft.do).

On its own

  • Create and edit notes, checklists and daily journal entries on its own
  • Organize notes into folders
  • Build simple databases with typed fields inside a note
3 more
  • Create a freeform whiteboard with shapes and text
  • Search its notes and read, export and tag them
  • Sign up, get access and delete its account itself in a browser

What it can't, and why

  • Get access credentials without a browserthe access link and the AI connection approval are only in the web app
  • Publish a page or invite a collaborator through codethose actions only exist in the web interface, not the API
  • Have the built-in AI assistant actually apply its suggested editsit only shows a preview; inserting it takes a manual copy-paste
1 more
  • Delete its own account through codeaccount deletion is a web-only form, not an API call
On its own, in a browser

Can an AI agent sign up for Craft on its own?

Yes, in a browser, without a human. email-code web form at docs.craft.do (invisible reCAPTCHA passed); no sign-up API

Official server · its calls worked

Does Craft (craft.do) have an MCP server, and can an agent connect to it?

Yes. Craft has an official MCP server. The server lists 3 tools, signs an agent in with OAuth and speaks the older 25 Nov 2025 MCP spec.

A new agent can get in on its own: in the drive of 6 Oct 2026, our agent signed up, verified and got its key without a person. Through the MCP server, 3 of our agent's 3 attempts worked.

What the drive found

APIOpenAPIMCP · official–CLI–SDKllms.txt–Webhooks–Sandbox
On its own, in a browser

How does an AI agent get a Craft (craft.do) API key?

In the drive of 6 Oct 2026, our agent got its Craft API key in a browser, without a person. API link created in the Connections tab (Connect All Documents, read+write, public secret URL). MCP: DCR register is headless but the OAuth authorize step needs a browser 'Approve' click; no device flow or CIMD

On its own, in a browser

Can an AI agent delete its Craft account?

Yes, in a browser, without a human. Settings > Account Settings > Delete Account, confirm by typing the email; afterwards published link 404, MCP token 401 'Access revoked', API link returns no content. No API route to delete the account

Reaches the checkout

Can an AI agent pay for Craft?

Reaches the checkout: stopped at the card form.

  • Stripe Checkout

It has a free plan.

What would let agents pay on their own
  1. Accept x402 or MPP on your API. 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.Step-by-step guide
  2. List your plans on Stripe Projects. Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev).Step-by-step guide

no 402/x402/MPP/UCP/auth.md; not listed in x402 Bazaar or mpp.dev. Upgrade opens hosted Stripe Checkout with a card form (not completed: no card). Team plans: 15-day trial without upfront payment per docs

From the drive of 6 Oct 2026.

For the team behind Craft.

Where agents stop in Craft (craft.do) today, and the fixes that get them further, highest impact first.

In on its own; 78% of the work done

The fixes, highest impact first

  1. Let agents get credentials without a browserStep-by-step guide
  2. Return success when task updates succeed
  3. Make cross-document regex search case-insensitive
4 more fixes
  1. Add API routes for publish and share
  2. Support MCP (the 28 Jul 2026 spec) and CIMD Step-by-step guide
  3. Publish a standalone openapi.json Step-by-step guide
  4. Add account deletion to the API
  • 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).
See the example report
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

Driven · L3 · Does the work badge

Behind the level.

The part scores and the measures behind them.

Part scores and the measures

Part scores

Agent-ready setup

  • llms.txt: found
  • OpenAPI: found
  • MCP server: found
  • CLI: not found

Not measured in this drive: Holds up, Docs match (part of an Audit).

Security: reported privately to the owner

The measures

  1. Work done78
  2. Reliability82
  3. Crash test–

For agents and builders.

The drive as data, every checkpoint and all 53 attempts.

How an agent connects · 6 tips
  • Create one 'Connect All Documents' API link (or approve MCP) in the browser once; then everything is headless
  • GET /blocks with Accept: text/markdown for readable content, JSON for block ids
  • After a task update error, re-read the task before retrying: the change may have applied
  • Use lowercase patterns in /documents/search?regexps=
  • MCP tools take command strings; '<entity> <action> --help' explains them and ';' batches commands
  • Rate limit: 50 req/10 s per IP, 100 req/60 s per space; headers x-ratelimit-*
Every checkpoint, in detail · 9 checkpoints
  1. DocsHeadlessllms.txt on www.craft.do and support.craft.do; support pages served as text/markdown (Accept header and .md URL); OpenAPI 3.1.1 embedded in connect.craft.do/api-docs/space (no standalone openapi.json)
  2. Sign upIn a browseremail-code web form at docs.craft.do (invisible reCAPTCHA passed); no sign-up API
  3. VerifyIn a browser6-digit code mail arrived in <1 min; signed in by opening the magic link in the browser (typing the code returned to the email screen)
  4. KeyIn a browserAPI link created in the Connections tab (Connect All Documents, read+write, public secret URL). MCP: DCR register is headless but the OAuth authorize step needs a browser 'Approve' click; no device flow or CIMD
  5. First callHeadlessGET /connection 200
  6. First actionHeadlessPOST /documents created a document, verified with GET /documents
  7. PayIn a browserno 402/x402/MPP/UCP/auth.md; not listed in x402 Bazaar or mpp.dev. Upgrade opens hosted Stripe Checkout with a card form (not completed: no card). Team plans: 15-day trial without upfront payment per docs
  8. CancelNot neededNothing to cancel: our agent used the free plan.
  9. DeleteIn a browserSettings > Account Settings > Delete Account, confirm by typing the email; afterwards published link 404, MCP token 401 'Access revoked', API link returns no content. No API route to delete the account
The attempt log · 53 attempts
Attempt log
CapabilityRouteResultEvidence
robots.txt: Fetch robots.txtapidone ✓https://www.craft.do/robots.txt 200 text/plain; User-Agent * Allow / with some Disallows (/.well-known/*, /payment, /api/draft/*); no Content-Usage or Content-signal lines
llms.txt: Fetch llms.txtapidone ✓www.craft.do/llms.txt 200 (H1 '# Craft'), llms-full.txt 200; support.craft.do/llms.txt 200 (34 KB help-center index with .md links)
markdown docs: Accept: text/markdown on docs pages and .md URLapidone ✓support.craft.do/en/integrate/mcp with Accept: text/markdown -> 200 content-type text/markdown, vary lacks accept (has accept-encoding); www.craft.do/imagine/guide/api -> text/markdown with Vary incl. accept; support .md URL -> 200 text/markdown
OpenAPI: Find API referenceapidone ✓connect.craft.do/api-docs/space embeds OpenAPI 3.1.1 'Craft: Full Space API' 1.0.0, 44 operations, server https://connect.craft.do/links/{secretLinkId}/api/v1, bearerAuth optional; no standalone openapi.json (connect.craft.do/api-docs/openapi.json returns the HTML app)
MCP server/discover: POST server/discover 2026-07-28 to https://mcp.craft.do/my/mcpapidone ✓401 WWW-Authenticate: Bearer error=invalid_token, resource_metadata=https://mcp.craft.do/.well-known/oauth-protected-resource/my/mcp; needs auth first
MCP auth metadata: PRM and AS metadataapidone ✓PRM {resource: https://mcp.craft.do/my/mcp, authorization_servers:[https://mcp.craft.do/my/auth]}; AS metadata has registration_endpoint (DCR), S256 PKCE, grants authorization_code+refresh_token, no client_id_metadata_document_supported, no device_authorization_endpoint, no agent_auth
cards: AI catalog, server card, A2A cardapifailed ✓www.craft.do/.well-known/ai-catalog.json, agent-card.json, agent.json, mcp/server-card.json all 404 HTML; mcp.craft.do/my/mcp/server-card 401 JSON (auth required)
pay discovery: auth.md, SKILL.md, /.well-known/ucp, oauth well-knowns on wwwapifailed ✓all 404 HTML soft pages on www.craft.do; api.craft.do/ 403 {message: Forbidden}
Sign up: Create account at docs.craft.do with the agent's inboxbrowserdone ✓docs.craft.do login form (email -> 6-digit code), name 'AgentDrives Test', 'By myself'; landed in 'My Space' All Docs. Page notes 'protected by reCAPTCHA' (invisible), no visible challenge
Verify email: Read sign-in code from inboxbrowserdone ✓mail 'Your Sign In Code: 405659' from login-noreply@craft.do arrived <1 min; typing code into the field returned to the email screen, opening the magic link https://docs.craft.do/link/web/login?code=•••• in the browser signed in
Get API credentials: Create an API connection (All Documents, read+write)browserdone ✓Connections tab > Add Your First API Connection > Connect All Documents: generated URL https://connect.craft.do/links/••••/api/v1, Permission Read and Write, Access Mode Public (secret URL is the credential; no API key by default)
First API call: GET /connectionapidone ✓GET https://connect.craft.do/links/••••/api/v1/connection -> 200 {space:{name:'My Space',timezone:'Europe/Amsterdam'}}; headers x-ratelimit-limit 100, x-ratelimit-remaining 99, x-ratelimit-reset 60
First real action: POST /documents creates 'AgentDrives Test Doc'apidone ✓200 items[0].id c02eedf4-...; GET /documents?folderId lists it
Write a block-based document: Create doc, insert h2+text+task blocks, update a block, read backapidone ✓POST /documents 200; POST /blocks (position end, pageId) returned 3 block ids; PUT /blocks updated text; GET /blocks?id=<doc> Accept text/markdown shows '## Plan / Written and then updated by the AgentDrives agent. / - [ ] Draft outline'
Organize documents into folders and Spaces: Create folder, move doc into itapidone ✓POST /folders 200 id 3ecb2e2e...; PUT /documents/move 200; GET /documents?folderId=3ecb... lists the doc; GET /folders shows documentCount 1
Create, schedule, and complete tasks inside documents: Add inbox task scheduled today, mark doneapipartial ✓POST /tasks 200 (scheduleDate 2026-10-06, in scope=active); PUT /tasks state done -> HTTP 404 {error:'Target page not found',code:NOT_FOUND_ERROR}, yet GET /tasks?scope=inbox shows state done, completedAt set, and scope=active is empty. Docs say done inbox tasks move to logbook; scope=logbook stayed empty
Create, schedule, and complete tasks inside documents: Add task in a document scheduled tomorrow, mark doneapidone ✓POST /tasks location document -> 200, listed in scope=upcoming; PUT /tasks state done -> 200 completedAt; GET scope=document shows '- [x] AgentDrives doc task'; scope=upcoming now empty
Use Daily Notes synced with Calendar: Write an entry into today's Daily Note and read it backapidone ✓POST /blocks position {end, date: today} 200; GET /blocks?date=today (text/markdown) returns page '2026.10.06' with '## AgentDrives log / Daily note entry written by the agent.'
Build a structured database with a Collection: Create 'Reading list' collection (singleSelect + date) in the doc, add a row, read backapidone ✓POST /collections 200 collectionBlockId af88...; POST /collections/{id}/items 200; GET items returns the row with status 'To read', due_date 2026-10-20; GET schema returns JSON Schema. Invalid option -> 400 VALIDATION_ERROR naming valid options
Create a Whiteboard for freeform visual work: Create a whiteboard in the doc, add a rectangle and a text element, read backapidone ✓POST /whiteboards 201 whiteboardBlockId d182...; POST /whiteboards/{id}/elements 201; GET elements returns ad-rect-1 at x100,y80 and ad-text-1 'AgentDrives' (Excalidraw format)
Search across the workspace (exact phrase, exclude, regex): Regex search across the space for 'Agent[Dd]rives (agent|log)'apipartial ✓GET /documents/search?regexps=Agent[Dd]rives (agent|log) -> 200 {items:[]}; 'Agent.rives' -> []; lowercase 'agentdrives (agent|log)' -> 2 correct hits (daily note + doc block). include=AgentDrives works. GET /blocks/search (in one doc) matches the mixed-case pattern
Search across the workspace (exact phrase, exclude, regex): Regex search with lowercase patternapidone ✓regexps='agentdrives (agent|log)' -> exactly the 2 matching blocks; 'daily note entr(y|ies)' -> only the daily note
Publish a document as a public web page: Publish the test doc and open the link logged outbrowserdone ✓Share > Publish > Create Link produced https://badgers-flow-qo9.craft.me/••••. opened on craft.me (no session there, shows 'What's your name?' prompt) it renders 'Plan / Written and then updated by the AgentDrives agent. / Reading list' table
MCP version: server/discover with token, then initializemcpdone ✓server/discover (MCP-Protocol-Version 2026-07-28) -> HTTP 400 JSON-RPC -32000 'Unsupported protocol version: 2026-07-28 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)'; initialize offering 2026-07-28 -> 200 SSE protocolVersion 2025-11-25, serverInfo craft-workflow-links 1.0.0, no Mcp-Session-Id
MCP OAuth credential: DCR register + authorization code with PKCE for https://mcp.craft.do/my/mcpmcpdone ✓POST /my/auth/register 201 client_id (headless); /my/auth/authorize redirected to docs.craft.do/authorize-external 'Authorize MCP client … My Space / Approve' (browser click); token endpoint returned bearer, expires_in 3600, refresh_token
Write a block-based document: Append a block via MCP craft_write and read back via craft_readmcpdone ✓tools/list: craft_read, craft_write, blocks_revert (command-string tools); craft_write 'blocks add --id <doc>' -> 'Added 1 block'; craft_read 'blocks get <doc> --format markdown' contains 'Line added through the Craft MCP server.'
Share a document with collaborators for real-time co-editing: Invite our second inbox the agent's inbox as EditorbrowserpartialShare > Invite to Collaborate (panel needs coordinate clicks, its fields are not reachable by role/text selectors): the agent's inbox listed with role Editor, Share button shows collaborators icon. No invitation mail reached an inbox within ~5 min (cause may be on either side). Live co-editing by the invitee not verified
Use Craft Assistant to generate, restructure, or edit document content: Ask the Assistant (browser) to add a Summary paragraph at the end of the docbrowserpartial ✓Assistant panel (Fast, Auto) read the doc and generated a 'Summary' card, then said 'You can copy this summary and add it to the end of your document'; GET /blocks?id=<doc> afterwards has no Summary block: generated, not applied
Tag content for cross-folder filtering: Tag a block with #agentdrivestag via the API and filter by itapidone ✓POST /blocks markdown 'Tagged line #agentdrivestag' 200; GET /documents/search?include=#agentdrivestag returns that block; web app All Tags lists 'agentdrivestag 1 / AgentDrives Test Doc'
Export documents (Markdown, PDF, TextBundle, CSV): Export the doc as Markdown through the APIapidone ✓GET /blocks?id=<doc> with Accept: text/markdown returns the whole document as markdown (headings, tasks, collection as <collection> tags, whiteboard as image link); also the bundle.md download
Start a document from a template: Create a new document from a template via APIapifailedAPI can create a template (POST /documents destination templates -> 200, listed under location=templates) but no documented operation instantiates a new document from a template; POST /documents takes only title + destination
Connect external tools via the Craft REST API: Create an API connection and call its endpointapidone ✓All-Documents connection URL https://connect.craft.do/links/••••/api/v1 answered 30+ documented calls (documents, blocks, tasks, collections, whiteboards, search). A selected-documents connection was not created, so scoping to selected docs was not checked
Pay step: Probe agent payment rails and the upgrade path, without payingbrowserdone ✓x402.craft.do and mpp.craft.do do not resolve; agents.craft.do is 'Craft Agents' product page (HTML); no 402 on API paths (bad link -> 404); /.well-known/ucp, auth.md, SKILL.md 404; craft.do not found in x402 Bazaar or mpp.dev/api/services; no x-payment-info in the OpenAPI; no billing tools in MCP tools/list. 'Get Craft Plus' > 'Get Plus Monthly' opens Stripe Checkout (checkout.stripe.com/c/pay/cs_live_…, 'Craft Docs Ltd', card number field); stopped there. Docs: Team plans have a 15-day trial 'no payment required upfront'
Cancel plan: Find the cancel routenoneskippedno plan started. Docs (cancel-subscription.md): cancel in Craft > Settings and Billing > Billing & Subscription (Stripe billing portal); App Store/Setapp through those stores. No billing API
Delete account and data: Delete the account in Settings > Account Settings > Danger Zonebrowserdone ✓Delete Account dialog asks to type the account email; after Delete the app returns to the login screen. Afterwards: published craft.me link 404; MCP token 401 'Access revoked'; API link GET /blocks?id=<doc> 404 'Block not found', /folders only built-in empty locations, search empty.
Cleanup: Remove test databrowserdone ✓account deleted (see delete); MCP refresh token revoked before deletion
Apply a document style/theme: not attemptednoneskippedstyles: no API/MCP write route found (MCP only has 'blocks explore-themes' read); UI not tried for time
Clip web pages into Craft with the Web Clipper: not attemptednoneskippedWeb Clipper is a browser extension; not installable in the drive browser
Forward emails directly into a Craft space: not attemptednoneskippedneeds sending an email from a mailbox; our inbox only receives
Import notes from other apps (Notion, Obsidian, Evernote, Markdown, TextBundle, CSV): not attemptednoneskippedimport is UI-only (file upload / third-party OAuth); not tried for time
Present a document as a slideshow: not attemptednoneskippedpresent mode is UI-only; not tried for time
Track analytics on a published page: not attemptednoneskippedpaid feature per map; not attempted on free plan
Restrict access to a published page (password, email domain, expiration): not attemptednoneskippedpublish security settings UI-only; not tried for time
Sync tasks with Apple Reminders: not attemptednoneskippedApple Reminders needs Mac/iOS
View Apple Calendar events alongside Craft tasks/notes: not attemptednoneskippedApple Calendar needs Mac (docs: not on Windows or Web)
Import highlights from Readwise (Kindle, Instapaper, etc.): not attemptednoneskippedneeds a Readwise account
Restore a prior document version: not attemptednoneskippedversion history not in API/MCP; UI not tried for time
Jump to any document/daily note with Quick Open: not attemptednoneskippedQuick Open is an in-app keyboard UI; not tried
Automate Craft with Apple Shortcuts/Siri: not attemptednoneskippedApple Shortcuts needs iOS/macOS
Connect a custom domain for published pages: not attemptednoneskippedpaid feature per map; not attempted
Add a custom logo/brand to published pages: not attemptednoneskippedpaid feature per map; not attempted
Manage team members across a shared Space: not attemptednoneskippedpaid feature per map; not attempted
Choose the Assistant's AI model (Core/Fast/Max/on-device Local): not attemptednoneskippedAssistant model picker seen in the UI ('Fast', 'Auto' buttons) but switching not tried

Also in Docs and workspace.