Can an AI agent use NocoDB?

As of 3 Oct 2026, an AI agent gets into NocoDB on its own and does 100% of the core work.

Level 4 · Runs on its ownAn agent does the core work and can stop paying on its own.
  • Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
  • Access: Sign-up in a browser.
  • Use: 100% 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 L5 · Autonomous: pay without a person.

What the levels mean

Driven 3 Oct 2026Same level in 3 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 serverGet in on their own.
  • Signed agentsThe sign-up page 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 NocoDB.

On its own

  • Create databases, tables, and custom fields like formulas and lookups on its own
  • Add, change, and delete records, and link records together
  • Build different view types like kanban boards and calendars, and share a password-protected view
5 more
  • Import a spreadsheet file into a new table
  • Build and test an automated workflow, though a person has to flip the final switch to turn it on
  • Build simple app pages and dashboards with charts
  • Ask the built-in AI assistant to create a table just by describing it in plain English
  • Invite another person to collaborate on a project

What it can't, and why

  • Sign up and get its first access key without a browserOnly the web sign-up form and the account settings page offer this
  • Turn on a workflow it builtSwitching a workflow live is only available in the website, by design
  • Use some features (sharing dashboards, member management) through its automated interface on the free planThose are blocked behind a paid plan when accessed that way, even though other routes to the same feature work
2 more
  • Pay for or cancel a paid plan on its ownUpgrading only works through a web checkout page; there is no automated payment option
  • Delete its own accountAccount deletion is only available through the website
On its own, in a browser

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

Yes, in a browser, without a human. No sign-up API. Web form at app.nocodb.com/signup (email + password; Google; SSO), no CAPTCHA; done in our agent's browser.

Official server · 15 of 21 calls worked

Does NocoDB have an MCP server, and can an agent connect to it?

Yes. NocoDB has an official MCP server.

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

What the drive found

APIOpenAPIMCP · officialCLI–SDKllms.txtWebhooks–Sandbox
On its own, in a browser

How does an AI agent get a NocoDB API key?

In the drive of 3 Oct 2026, our agent got its NocoDB API key in a browser, without a person. API tokens and MCP keys are created only in Account settings (the tokens API answers 401 'not allowed with API token'). New tokens default to Records RW / Tables R / Fields R; a second token with Read & write all was needed to create bases. MCP OAuth (DCR + PKCE) needs a consent page.

On its own, in a browser

Can an AI agent delete its NocoDB account?

Yes, in a browser, without a human. Account > Profile > Danger Zone > Delete Account (type email). Bases can be deleted over REST (soft delete to trash); the account only in the UI. Afterwards the token got 401 and the MCP key 404.

Reaches the checkout

Can an AI agent pay for NocoDB?

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 / L402 anywhere and no billing API. Billing > Upgrade Workspace > Choose Plus opens an embedded Stripe Checkout (EUR 266.11/year) with invisible hCaptcha and HUMAN Security; no trial offered there. Not paid (no card); on the evidence, untested whether its invisible checks pass an agent.

From the drive of 3 Oct 2026.

For the team behind NocoDB.

Agents get through NocoDB today. The fixes that keep it that way, highest impact first.

Through every checkpoint

The fixes, highest impact first

  1. Offer a headless sign-up and token pathStep-by-step guide
  2. Align REST plan gates with MCP and pricing
  3. Fix filter and sort update/delete routes
11 more fixes
  1. Add token scopes for automation and admin APIs
  2. Reject unknown fields on record writes
  3. Fix title-only rename of formula fields
  4. Support MCP (the 28 Jul 2026 spec) and server discovery
  5. Declare auth and errors in the OpenAPI Step-by-step guide
  6. Let the API enable a tested workflow
  7. Document how to verify webhook payloads
  8. Honour Idempotency-Key on record creates
  9. Fix the skill CLI upload and error output
  10. Offer account deletion over the API
  11. Add a billing API for plan changes Step-by-step guide
  • 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 · L4 · Runs on its own badge

Behind the level.

The part scores and the measures behind them.

Part scores and the measures · level history · paid plans

Part scores

  • Holds up: 59 of 100, fair
  • Docs match: 59 of 100, fairMCP spec of 25 Nov 2025 (1 version behind) · MCP discovery (behind) · MCP client registration (behind) · OpenAPI 3.1.0 (1 version behind)

Agent-ready setup

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

Security: reported privately to the owner

The measures

  1. Work done100
  2. Reliability69
  3. Crash test49
  4. Surface tested57
  5. Docs accuracy60
  6. Docs completeness56

Level history

  1. 2 Oct 20262 drivesL4Runs on its own
  2. 3 Oct 2026L4Runs on its own

Needs a paid plan

Not counted in the level. Our drive used free plan.

Needs a paid plan
CapabilityPlan
Scriptshigher plan / Enterprise API
Webhookshigher plan
NocoDocshigher plan
Record-level securityhigher plan
Nested teamshigher plan
SnapshotsPlus
Workspace audit log (record history works on Free)higher plan
/ / over REST only (MCP works on Free)higher plan
How NocoDB handles an agent's mistakes · 9 probes · core run 3×

Malformed requests, a retry, a wrong key and a short burst of reads on our agent's own account, and how NocoDB answered.

  1. Clear errors70
  2. Recovery77
  3. Safe retries0

Validation errors are clear JSON naming the field, but unknown record fields are silently dropped, a formula rename leaks a JS error and a wrong MCP key answers 404. A repeated create duplicates; 15 quick reads stayed inside the 60/min budget shown in x-ratelimit headers.

Surface audit: 394 documented operations, 354 run, 219 passed, 143 not as documented, 8 blocked (sandbox or plan limits), 24 not run for time, 8 left out to stay safe.

  • Silentrepeat a create with the same Idempotency-KeyCreate, update, delete records (CRUD)200 then 200; list shows ids [6, 7]
  • VagueMCP call with a wrong x-api-keyThe first call404 application/json; charset=utf-8 {"msg": "MCP Token not found"}
  • Clearcreate table without required titleCreate a table with fields400 application/json; charset=utf-8 {"error": "ERR_INVALID_REQUEST_BODY", "message": "Validation failed: 'title' is required", "details": [{"instancePath": "", "schemaPath": "#/required", "keyword": "
  • Clearfield with bad type enumAdd, edit and configure fields (30+ types incl. links, lookups, rollups, formulas)400 application/json; charset=utf-8 {"error": "ERR_INVALID_REQUEST_BODY", "message": "Validation failed: 'type' must be one of: SingleLineText, LongText, PhoneNumber, URL, Email, Number, Decimal, Curr
  • Clearlist records of a non-existent table idCreate, update, delete records (CRUD)422 application/json; charset=utf-8 {"error": "ERR_TABLE_NOT_FOUND", "message": "Table 'mzzzzzzzzzzzzzz' not found"}
  • Clearupdate a record id that does not existCreate, update, delete records (CRUD)404 application/json; charset=utf-8 {"error": "ERR_RECORD_NOT_FOUND", "message": "Record '99999' not found"}
  • Clearbulk create with one invalid row (partial failure)Create, update, delete records (CRUD)422 application/json; charset=utf-8 {"error": "ERR_INVALID_VALUE_FOR_FIELD", "message": "Invalid value 'not-a-number' for type 'Number' on column 'Hours'"}
  • Clearcall with a wrong API tokenThe first call401 application/json; charset=utf-8 {"error": "ERR_AUTHENTICATION_REQUIRED", "message": "Authentication required - Invalid token"}
  • Clearburst of 15 sequential GETs on one cheap readRead and write data/meta via REST API (v3 data and meta endpoints)15x 200; x-ratelimit-limit 60, x-ratelimit-remaining 57->43, x-ratelimit-reset counting down (seconds); no RateLimit/RateLimit-Policy (IETF draft) headers, no 429 reached

For agents and builders.

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

How an agent connects · 7 tips
  • Use the MCP server: on Free it covers far more than REST (views, sharing, dashboards, interfaces, comments, members, workflows). Call listTools(category) to reveal write tools, then callTool.
  • Create the API token with 'Read & write all': the default token (Records RW, Tables R, Fields R) cannot create bases.
  • Check field names on record writes: unknown fields are silently dropped with 200; read the record back.
  • The sort query parameter must be JSON, e.g. [{"field":"Hours","direction":"desc"}].
  • Free plan: 1,000 API calls a month and 60 meta calls a minute (x-ratelimit-* headers); MCP tool calls count too.
  • When renaming a Formula field, resend options.formula.
  • Workflows: test every node with validateWorkflowNode before publishWorkflow, then ask a human to switch it Live.
Every checkpoint, in detail · 9 checkpoints
  1. DocsHeadlessllms.txt and llms-full.txt, every docs page as Markdown (.md or Accept: text/markdown), OpenAPI 3.1.0 for v3 data+meta, MCP docs.
  2. Sign upIn a browserNo sign-up API. Web form at app.nocodb.com/signup (email + password; Google; SSO), no CAPTCHA; done in our agent's browser.
  3. VerifyIn a browser6-digit code from noreply@nocodb.com arrived within ~30 s and was read headless from our inbox; the code is entered in the web app.
  4. KeyIn a browserAPI tokens and MCP keys are created only in Account settings (the tokens API answers 401 'not allowed with API token'). New tokens default to Records RW / Tables R / Fields R; a second token with Read & write all was needed to create bases. MCP OAuth (DCR + PKCE) needs a consent page.
  5. First callHeadlessGET /api/v3/meta/workspaces with xc-token -> 200; MCP tools/list with x-api-key.
  6. First actionHeadlessPOST /api/v3/meta/workspaces/{ws}/bases created a base, read back with GET.
  7. PayIn a browserNo 402 / x402 / MPP / UCP / L402 anywhere and no billing API. Billing > Upgrade Workspace > Choose Plus opens an embedded Stripe Checkout (EUR 266.11/year) with invisible hCaptcha and HUMAN Security; no trial offered there. Not paid (no card); on the evidence, untested whether its invisible checks pass an agent.
  8. CancelNot neededNothing to cancel: our agent used the free plan.
  9. DeleteIn a browserAccount > Profile > Danger Zone > Delete Account (type email). Bases can be deleted over REST (soft delete to trash); the account only in the UI. Afterwards the token got 401 and the MCP key 404.
The attempt log · 73 attempts
Attempt log
CapabilityRouteResultEvidence
robots/aipref: robots.txt and Content-Usageapidone ✓https://nocodb.com/robots.txt 200: User-agent: * / Allow: / / Sitemap. No Content-Usage or Content-signal line; no Content-Usage response header on nocodb.com
llms.txt: fetch /llms.txtapidone ✓https://nocodb.com/llms.txt 200 text/plain 209847 bytes, H1 # NocoDB; /llms-full.txt 200 1.97 MB
markdown docs: Accept: text/markdown and .md URLapidone ✓GET /docs/apis-and-mcp/mcp with Accept: text/markdown -> content-type: text/markdown, vary: Accept; /docs/apis-and-mcp/mcp.md -> 200 text/markdown
mcp server/discover: POST server/discover 2026-07-28 to https://app.nocodb.com/mcpmcpblocked ✓401 application/json {"error":"ERR_AUTHENTICATION_REQUIRED","message":"Authentication required - Authentication required"}; no WWW-Authenticate header (no resource_metadata pointer). Retry with credentials pending
find docs: find API, MCP and agent docsapidone ✓llms.txt, /docs/apis-and-mcp(.md), OpenAPI 3.1.0 at https://nocodb.com/apis/v3/swagger-v3.json (132 operations), MCP doc with OAuth + token config
sign up: create accountbrowserdone ✓No signup operation in OpenAPI or docs; web form app.nocodb.com/signup (email+password, Google, SSO). No CAPTCHA signals (turnstile/hcaptcha/recaptcha all false). Create Account -> We Emailed You code screen
verify email: enter 6-digit codebrowserdone ✓Mail from noreply@nocodb.com Your verification code for nocodb cloud arrived within ~30s; code entered on sign-in confirm screen; landed on app.nocodb.com onboarding (What do you plan on using NocoDB for?)
API token: create personal API tokenbrowserdone ✓Account > API Tokens > Create New API Token in web UI -> nc_pat_•••• shown once. POST /api/v3/meta/tokens exists in OpenAPI but itself needs a token, so the first credential needs the web UI
first API call: GET /api/v3/meta/workspacesapidone ✓200 {"list":[{"id":"[redacted]","title":"an inbox"}]}; headers x-ratelimit-limit: 60, x-ratelimit-remaining: 59, x-ratelimit-reset: 60
Create a base: POST create base with default-scope tokenapifailed ✓POST /api/v3/meta/workspaces/[redacted]/bases {"title":"AD Drive Base 1"} -> 403 {"error":"ERR_FORBIDDEN","message":"Forbidden - API token does not have permission to baseCreate. Required permission not granted."}
Create a base: Create base "AD Drive Base 1" and read it backapidone ✓POST /api/v3/meta/workspaces/[redacted]/bases -> 200 id pwv7v3b8v82110j; GET /api/v3/meta/bases/pwv7v3b8v82110j -> 200 title AD Drive Base 1
Create a table with fields: Create table Tasks with Name, Status (select), Hours, Dueapidone ✓POST /api/v3/meta/bases/pwv7v3b8v82110j/tables -> 200 id malamliwjxt0fwf; GET table schema -> fields [('Id', 'ID'), ('Name', 'SingleLineText'), ('Status', 'SingleSelect'), ('Hours', 'Number'), ('Due', 'Date')]
Add, edit and configure fields: Add Formula, Links (mo), Lookup, Rollup fields; rename and add option to a SingleSelectapidone ✓POST /fields Cost Formula {Hours}*50, Project Links mo->Projects, Project Title Lookup, Projects.Total Hours Rollup sum -> 200 each; PATCH /fields/{id} Status->State + Blocked choice -> 200; GET table/field shows them
Create, update, delete records: Create 2 tasks, update one, read back, delete the other, link task to projectapidone ✓POST records -> ids 1,2; PATCH id1 State=Done Hours=5 -> GET /records/1 shows Done, 5, Cost 250 (formula); DELETE id2 -> {deleted:true}, GET /records/2 -> 404 ERR_RECORD_NOT_FOUND; link POST -> 200; Projects/1 Total Hours rollup = 5
Sort, filter, group and search records in a view: Add filter State=Done and sort Hours desc to the default grid view; read config and filtered records back; ad-hoc where+sort queryapidone ✓POST /views/vwtd0irm5m4eq1qx/filters -> 200 filter eq Done; POST /sorts -> 200 desc; GET filters/sorts list them; GET records?viewId=vwtd0irm5m4eq1qx returns only the Done record; GET records?where=(Hours,gt,1)&sort=[...] -> 200
Build multiple view types: Create kanban, calendar, form, gallery, grid views on Tasks via RESTapiplan_gated ✓POST /api/v3/meta/bases/{base}/tables/{table}/views (each type) -> 403 {"error":"ERR_FEATURE_NOT_SUPPORTED","message":"Upgrade to a higher plan to use view api."}; GET views list and GET view also 403 on Free plan
mcp server/discover with key: server/discover 2026-07-28 then initialize fallback on https://app.nocodb.com/mcp/<ncId>mcpdone ✓server/discover -> 400 {"jsonrpc":"2.0","error":{"code":-32000,"message":"Bad Request: 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 NocoDB MCP Server 1.0.0, no Mcp-Session-Id; tools/list -> 72 tools listed + listTools/callTool reveal write tools by category
Build multiple view types: Create kanban, calendar, form and gallery views on Tasks via MCP createView; read back with listViewsmcpdone ✓callTool createView kanban vwuqcy90xriglf5n, then {'kanban': 'vwg6x741lx8a71fz', 'calendar': 'vwjhp0srzqr43mwb', 'form': 'vwsbgtm6tlpvkuga', 'gallery': 'vwc472oxabogs4fd'}; listViews returns all with their type
Share a view publicly or with a password: Share the Tasks grid view with a password via MCP shareView; open the public linkmcpdone ✓callTool shareView password -> public_url https://app.nocodb.com/nc/view/<uuid>, password_protected true; listSharedViews lists it; opening the link in a browser shows "This shared view is protected" and the password unlocks the Tasks grid (Download/Fields/Filter/Group/Sort toolbar)
Build a workflow: Workflow: when a Task is created, create a Project titled from it. Build via MCP createWorkflow, validate both nodes, publish, then insert a taskmcppartial ✓createWorkflow aut4cxep6qpq026yn -> ok; validateWorkflowNode trigger/mk -> success (simulated); publishWorkflow -> ok but "enabled": false; POST record "WF trigger 1" -> no new Project after 15 s; listExecutions -> []; REST POST /workflows/{id}/execute with full-scope token -> 403 permission workflowExecute not granted
Build a workflow: Enable the MCP-built workflow in the web UI (the one step MCP does not expose), insert a task, check the effectbrowserdone ✓Workflow editor toggle Paused -> Live; POST record "WF trigger 2" -> Projects now has "WF A: WF trigger 2"; MCP listExecutions -> 1 execution status completed, node_count 2
Import a base from Airtable, CSV or Excel: Import a 3-row CSV as a new table via MCP importCsv, read rows back over RESTmcpdone ✓importCsv -> table m3qg7nwn548l5fe, rows_inserted 3, rows_failed 0; GET /api/v3/data/pwv7v3b8v82110j/m3qg7nwn548l5fe/records -> [('Ada', 'London', '9'), ('Grace', 'Arlington', '8'), ('Linus', 'Helsinki', '7')]
Create a base: Create base AD Trial 2, read backapidone ✓POST bases -> 200 plbijwi8hmn1qlh; GET -> 200
Create a table with fields: Create Tasks table with 4 fields, read backapidone ✓POST tables -> 200 m765btvbjd9h1hl; GET -> 200 fields ['Id', 'Name', 'Status', 'Hours', 'Due']
Add, edit and configure fields: Add Formula field, rename it, read backapifailed ✓POST field -> 200; PATCH -> 400; GET field title Cost, formula {'formula': '{Hours} * 50'}
Create, update, delete records: Create 2, update 1, read back, delete 1apifailed ✓create 200, update 200, read 200 state ok=False, delete 200, read deleted 404
Build multiple view types: Create kanban, calendar, form, gallery via MCP; listViewsmcpdone ✓createView -> {'kanban': 'vw1d2b05po4ckclm', 'calendar': 'vwntrzgqhgxw4lts', 'form': 'vwpkr30y5gl3ypsi', 'gallery': 'vwzeo6wszgfzwrea'}; listViews types ['calendar', 'form', 'gallery', 'grid', 'kanban']
Sort, filter, group and search records in a view: Filter Status=Done, sort Hours desc on grid; read records through viewapifailed ✓filter 200, sort 200, records via view []
Share a view publicly or with a password: shareView with password via MCP; listSharedViews; fetch linkmcpdone ✓shareView password_protected True, listed True, public_url HTTP 404
Import CSV: importCsv 3 rows as new table; read backmcpdone ✓importCsv {'table_id': 'mqkh8l3hipao35d', 'table_name': 'Imported People T2', 'created_table': True, 'rows_inserted': 3, 'rows_failed': 0, 'links_created': 0, 'links_unmatched': 0}; GET records count 3
Create a base: Create base AD Trial 3, read backapidone ✓POST bases -> 200 pxm2v5c5nt93p1a; GET -> 200
Create a table with fields: Create Tasks table with 4 fields, read backapidone ✓POST tables -> 200 momc5rd5z9ibwdd; GET -> 200 fields ['Id', 'Name', 'Status', 'Hours', 'Due']
Add, edit and configure fields: Add Formula field, rename it, read backapifailed ✓POST field -> 200; PATCH -> 400; GET field title Cost, formula {'formula': '{Hours} * 50'}
Create, update, delete records: Create 2, update 1, read back, delete 1apidone ✓create 200, update 200, read 200 state ok=True, delete 200, read deleted 404
Build multiple view types: Create kanban, calendar, form, gallery via MCP; listViewsmcpdone ✓createView -> {'kanban': 'vwhps7yxndqfmvcm', 'calendar': 'vwi8k1esogp58eub', 'form': 'vwxxy6u4mvjvqb22', 'gallery': 'vw86uiopt0xgiven'}; listViews types ['calendar', 'form', 'gallery', 'grid', 'kanban']
Sort, filter, group and search records in a view: Filter Status=Done, sort Hours desc on grid; read records through viewapidone ✓filter 200, sort 200, records via view ['Write spec T3']
Share a view publicly or with a password: shareView with password via MCP; listSharedViews; fetch linkmcpdone ✓shareView password_protected True, listed True, public_url HTTP 404
Import CSV: importCsv 3 rows as new table; read backmcpdone ✓importCsv {'table_id': 'mneexd1if4pq7qh', 'table_name': 'Imported People T3', 'created_table': True, 'rows_inserted': 3, 'rows_failed': 0, 'links_created': 0, 'links_unmatched': 0}; GET records count 3
Ask NocoAI to build from plain language: Ask NocoAI (base home prompt) to create a Vendors table with Name, Email, Ratingbrowserdone ✓Typed prompt in base home NocoAI box -> "Done - Vendors, Created 1 table" in ~75 s; GET /api/v3/meta/bases/{B1}/tables/mwte0524y94il49 -> fields Name SingleLineText, Email Email, Rating Rating, description "Vendor directory with contact details and rating."
Build a workflow: Build after-insert -> create-record workflow via MCP, validate, publish; enable in UI; insert a recordbrowserdone ✓workflow aute5jst9zkfhqp5k: target table rows ['Ada', 'Grace', 'Linus', 'WF T2: WF fire T2']; executions ['completed']
Build a workflow: Build after-insert -> create-record workflow via MCP, validate, publish; enable in UI; insert a recordbrowserdone ✓workflow autwd0in7ee0wk1yf: target table rows ['Ada', 'Grace', 'Linus', 'WF T3: WF fire T3']; executions ['completed']
Build a dashboard with chart widgets: Create dashboard via RESTapiplan_gated ✓POST /api/v3/meta/bases/{B1}/dashboards {"title":"Ops dashboard"} -> 403 {"error":"ERR_FEATURE_NOT_SUPPORTED","message":"Upgrade to a higher plan to use dashboard api."}
Build a dashboard with chart widgets: Create dashboard + metric widget (sum of Hours) via MCP; compare widget data to tablemcpdone ✓createDashboard mtppcjopgew19fx; createWidget metric sum Hours -> wgt9rlyzy1dbzmxxa; getWidgetData -> {"data": 7}; REST records Hours [5,1,1] sum 7
Configure webhooks: Register a record-insert webhook via RESTapiplan_gated ✓POST /api/v3/meta/bases/{B1}/tables/{T1}/hooks -> 403 {"error":"ERR_FEATURE_NOT_SUPPORTED","message":"Upgrade to a higher plan to use webhook api."}; GET hooks list also 403
Configure webhooks: createHook / listHooks over MCPmcpplan_gated ✓callTool createHook -> "Error: Upgrade to a higher plan to use webhook tools over MCP."; listHooks same
Write and run JavaScript Scripts: Create a script via REST and MCPapiplan_gated ✓POST /api/v3/meta/bases/{B1}/scripts with Read&write-all token -> 403 "API token does not have permission to createScript"; MCP createScript -> "Upgrade to a higher plan to use script tools over MCP."
Write NocoDocs: Create a document via REST and MCPapiplan_gated ✓POST /api/v3/docs/{B1} -> 403 {"error":"ERR_FEATURE_NOT_SUPPORTED","message":"Upgrade to a higher plan to access Documents API."}; MCP createDocument -> same message
Organize items into sidebar folders: Create folder Planning and move Projects table into it via MCP; listFoldersmcpdone ✓createFolder secwaqwd5u2s2xfmi; moveTableToFolder Projects -> fk_base_section_id set; listFolders shows Planning with child table maa8g6hv1zn2sop
Ask NocoAI to build from plain language: Ask NocoAI to create Vendors 2 with Name, Email, Ratingbrowserdone ✓NocoAI: "Done - Vendors 2 was created"; REST table fields [('Id', 'ID'), ('Name', 'SingleLineText'), ('Email', 'Email'), ('Rating', 'Rating')]
Ask NocoAI to build from plain language: Ask NocoAI to create Vendors 3 with Name, Email, Ratingbrowserdone ✓NocoAI: "Done - Vendors 3 was created"; REST table fields [('Id', 'ID'), ('Name', 'SingleLineText'), ('Email', 'Email'), ('Rating', 'Rating')]
Invite collaborators and assign roles: Invite our second inbox as base editor (REST then MCP)mcpdone ✓REST POST /bases/pwv7v3b8v82110j/members -> 403 "Upgrade to a higher plan to use member management api."; MCP addBaseMembers emails=[the agent's inbox] editor -> member us742qlwk790okep; listBaseMembers shows editor; invite mail "You've been invited to a Workspace" from noreply@nocodb.com arrived in our inbox
Invite collaborators: REST inviteapiplan_gated ✓POST /api/v3/meta/bases/{base}/members -> 403 {"error":"ERR_FEATURE_NOT_SUPPORTED","message":"Upgrade to a higher plan to use member management api."}
View audit logs: Read record history and base audit log via MCPmcpdone ✓listRecordAudits Tasks row 1 -> entries incl. op_type DATA_LINK by the agent's inbox with details (Tasks->Projects link we made)
View audit logs (workspace): listBaseAuditsmcpplan_gated ✓callTool listBaseAudits -> "Error: Upgrade to a higher plan to access workspace audit logs."
Record-level security policies: listRlsPolicies / createRlsPolicy via MCPmcpplan_gated ✓listRlsPolicies -> "Error: Upgrade to a higher plan to use row-level security."
Build an Interface: Create interface Task desk with a table page (grid of Name, Hours) via MCP, publish, open itmcpdone ✓createInterface itfbky1w5sq7o2fx2; createInterfacePage table; updateInterfacePage visualizations grid; publishInterface -> published true; interface URL in browser renders live rows Write spec A 5, WF trigger 1 1, WF trigger 2 1 ("3 records")
Nested teams: List/create teams via REST and MCPmcpplan_gated ✓GET /api/v3/meta/workspaces/[redacted]/teams -> 200 {"list": []}; MCP listWorkspaceTeams -> "Error: Upgrade to a higher plan to use team management."
NocoDB Claude agent skill: Download nocodb-skills.zip, check SKILL.md, run its noco.sh CLI (workspace:list, base:list, record:create, record:list, view:list)clipartial ✓https://nocodb.com/nocodb-skills.zip 200 application/zip 10012 bytes: SKILL.md (frontmatter name: nocodb, description) + scripts/noco.sh (942 lines, ~70 subcommands). workspace:list -> an inbox [redacted]; base:list -> 4 bases; record:create -> id 5 "From skill CLI"; record:list ok; view:list -> "jq: error (at <stdin>:0): Cannot iterate over null" (the 403 plan-gate message is swallowed)
Read and write data/meta via REST API: Use v3 data and meta endpoints end to end (bases, tables, fields, records, links, filters, sorts)apidone ✓See ..04, v3 meta+data calls all 200 and read back; views, dashboards, docs, hooks, members, scripts endpoints 403 on Free (plan or token-scope)
Snapshots of a base: Open Base Settings > Snapshots (no API or MCP tool for snapshots)browserplan_gated ✓Base Settings > Snapshots shows "Save a restorable copy of this base at a point in time." with an "Upgrade to Plus" button; no snapshot operation in OpenAPI or MCP tools/list (202 tools)
Sync data from external apps: not attemptednoneskippedNeeds accounts at external apps (GitHub, CRM, ...) we do not hold; Base Settings shows Sync with an info badge; map marks it paid
NocoDB Sync between bases: not attemptednoneskippedMap marks paid; not attempted for time
Connect external PostgreSQL/MySQL: not attemptednoneskippedNeeds a reachable database of ours; none in the sandbox
Use extensions: not attemptednoneskippedUI-only, no API/MCP route; pricing FAQ says extensions are cloud/enterprise premium; not attempted for time
SSO and SCIM: not attemptednoneskippedNeeds an identity provider of ours; pricing: SSO on Plus and above
Enable 2FA: not attemptednoneskippedUI-only (Account > Security); not enabled to avoid locking the headless account behind a TOTP device
Self-host: not installednoneskippedNo Docker in the drive sandbox (brief: do not install)
White-label branding: not attemptednoneskippedSelf-hosted Enterprise only
buy the product: Probe 402 rails, discovery files, registries; follow the in-app upgrade to the checkout (no card entered)browserdone ✓Unauthenticated API -> 401 JSON (no 402, no PAYMENT-REQUIRED, no WWW-Authenticate Payment/L402); x402./mpp./agents.nocodb.com -> 302 to https://nocodb.com/; /.well-known/ucp 404; no x-payment-info (OpenAPI has none); not in x402 Bazaar or mpp.dev/api/services; no x402/MPP/402/Stripe Projects mentions in llms-full.txt. Billing page (workspace settings) -> Upgrade Workspace -> pricing iframe (nocodb.com, invisible reCAPTCHA) -> Choose Plus -> app.nocodb.com/<ws>/checkout/<id> with embedded Stripe Checkout: "Subscribe to Plus EUR 266.11 per year", Link or card, frames include Stripe invisible hCaptcha and HUMAN Security. No trial offered at checkout; stopped before entering anything.
cancel plan: Find how to cancel/downgradenoneskippedNo plan was started. Pricing FAQ: "you can upgrade, downgrade, or cancel your plan at any time from your account settings" (web UI). No billing API or MCP tool found.
delete created data: DELETE every base in the workspace via REST, list againapidone ✓DELETE /api/v3/meta/bases/{id} for 7 bases -> 200; GET bases -> {"list": []}
delete account and data: Delete the account (Account > Profile > Danger Zone > Delete Account, type email)browserdone ✓Dialog listed workspace an inbox, all bases (including ones already deleted via API, still in trash) and both API tokens; after confirming -> redirected to /signin; API token now 401 "Invalid token"; MCP endpoint 404 "MCPToken ... not found"
bot checks: Record bot checks metbrowserdone ✓Sign-up, verify, login: no CAPTCHA signals (pw: turnstile/hcaptcha/recaptcha false). Pricing iframe (nocodb.com) loads invisible reCAPTCHA (anchor size=invisible); embedded Stripe Checkout loads invisible hCaptcha and HUMAN Security frames. No visible challenge appeared; nothing was submitted at checkout.

Also in Databases.