Can an AI agent use Notion?
As of 1 Oct 2026, an AI agent can't use Notion on its own: Sign-up refused: 'Signup is not allowed'.
- Find: Docs for agents: llms.txt, an OpenAPI 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 1 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 serverCan't get in on their own.
- Signed agentsThe sign-up page opens.
- Agents in a person's browserNot measured yet.
Sign-up page checked 12 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from
What an agent can do in Notion.
On its own
- Read all of Notion's developer documentation and technical reference without an account
- Register itself as a connected app, though a person still has to approve it
- Start a command-line login process that a person must finish
What it can't, and why
- Create a Notion accountSign-up only works in a browser and the server refused it outright.
- Get a working API keyEvery way to get one requires an already logged-in person.
- Create or edit any pages, databases, or contentNo account means no credentials to do anything.
1 more
- Pay for, downgrade, or delete a planThese are only available through Notion's website, not automatically.
Can an AI agent sign up for Notion on its own?
No. Sign-up: blocked. No documented headless sign-up. In the browser the form showed no visible challenge, and the first submit said a code was sent. Every later request (resend, /login, and a second fresh address) got 400 'Signup is not allowed.' from the server, shown as 'There was a problem signing up.'
Does Notion have an MCP server, and can an agent connect to it?
Yes. Notion has an official MCP server.
A new agent can't get in on its own: in the drive of 1 Oct 2026, our agent stopped at sign up (it was blocked). Through the MCP server, 1 of our agent's 1 attempt worked.
What the drive found
APIOpenAPIMCP · officialCLISDKllms.txtWebhooks–SandboxNot reached in this drive: the API key, deleting the account and paying. Every checkpoint, in detail
For the team behind Notion.
Where agents stop in Notion today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Tell a refused sign-up why (e.g. 'sign-ups from this network need review') instead of 'There was a problem signing up.'; a generic error leaves an agent guessing whether to retry
- Offer an agent-friendly sign-up path that ends in a PAT, e.g. a device-code flow that also creates the account, or a verified-agent lane for Web Bot Auth signed trafficStep-by-step guide
- Let the MCP OAuth consent flow create a fresh Free workspace for a new email, so one human approval gives an agent everythingStep-by-step guide
2 more fixes
- Expose plan upgrade/downgrade through the API or MCP (the upgrade_url is a good start) or a machine payment rail Step-by-step guide
- Document account deletion in the API or let the CLI do it
- 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 Notion, 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 · paid plans
Part scores
Agent-ready setup
- llms.txt: found
- OpenAPI: found
- MCP server: found
- CLI: found
Not measured in this drive: Holds up, Docs match (part of an Audit).
Needs a paid plan
Not counted in the level.
| Capability | Plan |
|---|---|
| AI search across connected apps | Business with Notion AI |
| Notion Agent / Custom Agents sessions | Business; Custom Agents $10 per 1,000 credits |
| AI meeting notes | Business |
| Admin API | Enterprise |
| Upgrade plan | paid |
For agents and builders.
The drive as data, every checkpoint and all 20 attempts.
How an agent connects · 5 tips
/api/tools/notion.json/tools/notion.mdMCP get_tool {"slug":"notion"}
- Use the hosted MCP server (mcp.notion.com/mcp, OAuth with dynamic client registration) or a PAT; the REST API with Notion-Version 2026-03-11 is fully described in /openapi.json
- Read docs as markdown: append .md to any developers.notion.com page, start from /llms.txt
- Getting in needs a human: let them sign up and either create a PAT or approve `ntn login --no-browser` / MCP OAuth, then run headless
- Call notion-get-tool-access first on MCP to learn which tools the workspace plan allows
- From datacenter IPs, sign-up may be refused with a generic error; don't retry in a loop
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessdevelopers.notion.com/llms.txt with a .md copy of every page, OpenAPI at /openapi.json (48 paths), CLI, MCP and webhook docs.
- Sign upBlockedNo documented headless sign-up. In the browser the form showed no visible challenge, and the first submit said a code was sent. Every later request (resend, /login, and a second fresh address) got 400 'Signup is not allowed.' from the server, shown as 'There was a problem signing up.'
- VerifyNot reachedMail not received: no code reached the agent's inbox in about 10 minutes. A resend was refused by the server, so only one code was ever requested. The cause of the missing mail may be on either side.
- KeyNot reachedEvery documented route needs a logged-in user in a browser: PATs in the Developer portal (Free plan: workspace owners only), internal connections, `ntn login --no-browser` (device URL + `ntn login poll`), MCP OAuth. MCP dynamic client registration itself worked headless. Not reached because there was no account.
- First callNot reachedWithout a token the API returns clear 401 JSON. No authenticated call was made.
- First actionNot reachedNo token, nothing created.
- PayNot reachedNo 402/x402/MPP/L402 on api.notion.com; x402./mpp./agents. subdomains do not resolve; no /.well-known/ucp, no x-payment-info, no Notion listing in x402 Bazaar or mpp.dev. Help center says upgrades are made in Settings and paid by card/Apple Pay/Google Pay through Stripe; MCP get-tool-access hands out an upgrade_url. is inferred from docs and was not reached without an account.
- CancelNot reachedNo plan was started. Help center places downgrade in the web UI (Settings, change plan); no billing API. from docs, untested.
- DeleteNot reachedNo account was created. Help center: Settings -> your name -> Delete my account, confirm by typing the email. No API route.
The attempt log · 20 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| docs: Fetch llms.txt, .md docs and OpenAPI | api | done ✓ | developers.notion.com/llms.txt 200 text/plain (254 doc links); /openapi.json 200, 48 paths; every doc page has a .md twin (saved in docs/) |
| pay discovery: Probe for 402 / agent payment rails | api | done ✓ | api.notion.com/v1/users 401 JSON 'Authorization header must use the format Bearer'; POST /v1/pages 401; x402./mpp./agents.notion.com do not resolve (curl 000); www.notion.com/.well-known/ucp 404 HTML; /auth.md and /SKILL.md redirect to app.notion.com and return 404 JSON 'File not found'; no x-payment-info in openapi.json; no x402/MPP/L402/USDC/ACP terms in docs |
| pay discovery: Find how a plan is bought | none | done | Pricing page: Free / Plus EUR9.50 / Business EUR19.50 / Enterprise contact sales. Help 'upgrade-or-downgrade-your-plan': pay by card, Apple Pay or Google Pay, processed by Stripe, in Settings. MCP docs: notion-get-tool-access returns upgrade_url / landing_page_url for gated tools. |
| mcp: Register an MCP OAuth client (dynamic client registration) | mcp | done ✓ | /.well-known/oauth-authorization-server 200 JSON with registration_endpoint; POST mcp.notion.com/register 201-style JSON with client_id issued; /authorize 302 to api.notion.com/v1/oauth/authorize (needs logged-in user consent) |
| cli: Start ntn CLI login without a browser | cli | partial ✓ | npm install ntn -> ntn 0.23.14; `ntn login --no-browser` printed app.notion.com/workers/cli-login?verificationCode=... plus `ntn login poll`, with a hint telling agents to show the URL to the user |
| signup: Sign up with email the agent's inbox | browser | partial | app.notion.com/signup: no visible challenge (invisible hCaptcha + reCAPTCHA scripts present, visible_challenge false). After Continue the page said 'We sent a code to your inbox' (shot 002.png) |
| verify: Receive email verification code | none | failed | inbox read the agent's inbox: 'no mail' after 120 s and again later (about 6 min after the send in total) |
| signup: Resend code / retry sign-up for an inbox | browser | blocked ✓ | POST app.notion.com/api/v3/sendTemporaryPassword -> 400 UserValidationError, clientData.type signup_generic_error, debugMessage 'Signup is not allowed.'; UI: 'There was a problem signing up.' (shot 004.png) |
| signup: Sign up with a second fresh address the agent's inbox | browser | blocked ✓ | getLoginOptions 200 then sendTemporaryPassword 400 'Signup is not allowed.' (signup_generic_error) |
| Create a page: Do it via MCP/API with a token | none | blocked | No account, so no PAT, connection token or MCP OAuth grant; unauthenticated API returns 401 |
| Read a page (properties, blocks, markdown): Do it via MCP/API with a token | none | blocked | No account, so no PAT, connection token or MCP OAuth grant; unauthenticated API returns 401 |
| Edit page content (blocks or markdown): Do it via MCP/API with a token | none | blocked | No account, so no PAT, connection token or MCP OAuth grant; unauthenticated API returns 401 |
| Update page properties, title, icon, cover: Do it via MCP/API with a token | none | blocked | No account, so no PAT, connection token or MCP OAuth grant; unauthenticated API returns 401 |
| Trash and restore a page: Do it via MCP/API with a token | none | blocked | No account, so no PAT, connection token or MCP OAuth grant; unauthenticated API returns 401 |
| Create a database / data source with schema: Do it via MCP/API with a token | none | blocked | No account, so no PAT, connection token or MCP OAuth grant; unauthenticated API returns 401 |
| Add and update rows in a database: Do it via MCP/API with a token | none | blocked | No account, so no PAT, connection token or MCP OAuth grant; unauthenticated API returns 401 |
| Query, filter and sort a data source: Do it via MCP/API with a token | none | blocked | No account, so no PAT, connection token or MCP OAuth grant; unauthenticated API returns 401 |
| Search pages and data sources by title: Do it via MCP/API with a token | none | blocked | No account, so no PAT, connection token or MCP OAuth grant; unauthenticated API returns 401 |
| Create a personal access token / connection: Create a PAT in the Developer portal | none | blocked | Docs: PATs are created at notion.so/developers/tokens by a logged-in workspace owner (Free plan: owners only); no account |
| Delete account: Delete account | none | skipped | No account was created. Help 'delete-your-account': Settings -> your name -> Delete my account, confirm by typing email; no API route in openapi.json |
Also in Docs and workspace.
CraftL3Gets in on its ownNotion vs Craft
CodaL3Gets in on its ownNotion vs Coda