The NocoDB MCP connector routes your AI agent's tool calls to NocoDB's own MCP server through Scalekit. Each user signs in to NocoDB once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 147 tools.
- Tools
- 147
- What they doRead · write · destructive
- 9 · 118 · 209 read118 write20 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the NocoDB MCP connection
In AgentKit > Connections, create a NocoDB MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for NocoDB MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'nocodbmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize NocoDB MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'nocodbmcp_getbaseinfo',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "nocodbmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize NocoDB MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="nocodbmcp_getbaseinfo",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolnocodbmcp_aggregatePerform aggregations (sum, count, avg, etc.) on table data with filtering and groupingRead-onlyAggregate
Perform aggregations (sum, count, avg, etc.) on table data with filtering and grouping
Inputs
aggregationsarrayrequired- Aggregations to perform â at least one
filterGroupsarrayrequired- Filter groups, each producing its own result under its alias. Omit (or pass []) for one unfiltered result keyed "all"
tableIdstringrequired- Table ID
viewIdstring- Optional view ID to use view-specific configurations â the view filters, sorts and field visibility are applied. Obtain one from getTableSchema.
nocodbmcp_countrecordsCount Records in a TableRead-onlyCountRecords
Count Records in a Table
Inputs
tableIdstringrequired- Table ID
filterstring- Structured filter â the same shape as createFilter: a single condition { field, operator, value }, or a group { group_operator: "AND"|"OR", filters: [...] } whose members may themselves be groups. Field names and values are quoted for you, so commas, parentheses and quotes in either are safe. Prefer this over `where`; pass only one of the two.
viewIdstring- Optional view ID to use view-specific configurations â the view filters, sorts and field visibility are applied. Obtain one from getTableSchema.
wherestring- Filter records using NocoDB query syntax, e.g. (status,eq,active)~and(amount,gte,100). For the complete operator list, date sub-operators, quoting rules and examples, see the `where` parameter of the `queryRecords` tool â the syntax is identical.
nocodbmcp_createrecordsCreate records in a tableRead-onlyCreateRecords
Create records in a table
Inputs
recordsarrayrequired- Array of records with fields as key-value pairs. At most 100 per call â a longer array is rejected outright, so split larger writes into batches.
tableIdstringrequired- Table ID
returnFieldsstring- Fields to return for each record â an array of field names or ids, or a comma-separated list. Omit to get every field; pass only what you need to keep large writes readable.
nocodbmcp_getbaseinfoFetch information about current baseRead-onlyGetBaseInfo
Fetch information about current base
Inputs
This tool takes no inputs.
nocodbmcp_getrecordFetch a record by IDRead-onlyGetRecord
Fetch a record by ID
Inputs
recordIdstringrequired- Record ID or primary key value
tableIdstringrequired- Table ID
fieldsstring- Fields to return â an array of field names, or a comma-separated list. Linked-record fields returned with this option omit their display values.
viewIdstring- Optional view ID to use view-specific configurations â the view filters, sorts and field visibility are applied. Obtain one from getTableSchema.
nocodbmcp_gettableschemaGet the table schema including fields and views informationRead-onlyGetTableSchema
Get the table schema including fields and views information
Inputs
tableIdstringrequired- Table Id
includeSystemboolean- Also return the system CreatedAt, UpdatedAt, CreatedBy and UpdatedBy fields the table has, marked `system: true` â e.g. to sort or filter an interface page by them. Default false.
nocodbmcp_gettableslistList tables accessible by userRead-onlyGetTablesList
List tables accessible by user
Inputs
This tool takes no inputs.
nocodbmcp_queryrecordsQuery Records from a TableRead-onlyQueryRecords
Query Records from a Table
Inputs
tableIdstringrequired- Table ID
fieldsstring- Fields to return â an array of field names, or a comma-separated list. Linked-record fields returned with this option omit their display values.
filterstring- Structured filter â the same shape as createFilter: a single condition { field, operator, value }, or a group { group_operator: "AND"|"OR", filters: [...] } whose members may themselves be groups. Field names and values are quoted for you, so commas, parentheses and quotes in either are safe. Prefer this over `where`; pass only one of the two.
pageinteger- Page number for pagination (default: 1). Use `next_page` / `prev_page` from the response. A page past the end returns an empty `records` list whose `prev_page` is the last page with records (1 if there are none).
pageSizeinteger- Number of records to fetch (default: 50, minimum 1). Capped at 200 here, and further by the deployment limit â the response reports the `page_size` actually applied.
sortarray- Sort order, applied in array order, e.g. [{"field":"Amount","direction":"desc"}]
viewIdstring- Optional view ID to use view-specific configurations â the view filters, sorts and field visibility are applied. Obtain one from getTableSchema.
wherestring- Filter records using NocoDB query syntax. SYNTAX: Basic: (field,operator,value) No-value ops: (field,operator) Date with sub: (field,operator,sub_operator) or (field,operator,sub_operator,value) Multiple values: (field,operator,value1,value2,value3) OPERATORS: Text/General: eq Equal to (name,eq,John) neq Not equal to (status,neq,archived) like Contains (use % wildcard) (name,like,%john%) nlike Does not contain (name,nlike,%test%) in In list of values (status,in,active,pending,review) Numeric: gt Greater than (>) (price,gt,100) lt Less than (<) (stock,lt,10) gte Greater than or equal (>=) (rating,gte,4) lte Less than or equal (<=) (age,lte,65) Range: btw/nbtw take two bounds on Number, Decimal, Currency, Percent, Rating, Duration, Time and text fields. They are REJECTED on Date/DateTime and Checkbox; use two bounds there. Between (inclusive) (price,btw,10,100) Not between (score,nbtw,0,50) Null/Empty (no value needed): blank Is blank (null or empty) (notes,blank) notblank Is not blank (email,notblank) null Is null (deleted_at,null) notnull Is not null (created_by,notnull) empty Is empty string (description,empty) notempty Is not empty string (title,notempty) Boolean/Checkbox (no value needed): checked Is checked/true (is_active,checked) notchecked Is not checked/false (is_archived,notchecked) Multi-Select/Tags: allof Contains all of (tags,allof,urgent,important) anyof Contains any of (tags,anyof,bug,feature) nallof Does not contain all of (tags,nallof,spam,junk) nanyof Does not contain any of (categories,nanyof,draft,deleted) DATE/TIME FILTERING (for Date, DateTime, CreatedTime, LastModifiedTime fields): Date fields require a sub-operator. Syntax: (field,operator,sub_operator) or (field,operator,sub_operator,value) CRITICAL: To filter by a specific calendar date you MUST use the "exactDate" sub-operator and put the date in the value slot â NEVER place a YYYY-MM-DD date directly after the operator. CORRECT: (due_date,eq,exactDate,2026-06-01) WRONG: (due_date,eq,2026-06-01) CORRECT: (due_date,gt,exactDate,2026-06-01) WRONG: (due_date,gt,2026-06-01) A bare date with no sub-operator is read as the sub-operator and rejected ("'2026-06-01' is not supported"). isWithin - Check if date falls within a time range: Sub-operators (no value): pastWeek, pastMonth, pastYear, nextWeek, nextMonth, nextYear Sub-operators (value = days): pastNumberOfDays, nextNumberOfDays Examples: (created_at,isWithin,pastWeek) Last 7 days (created_at,isWithin,pastMonth) Last 30 days (due_date,isWithin,pastNumberOfDays,14) Last 14 days (due_date,isWithin,nextNumberOfDays,30) Next 30 days eq, neq, gt, lt, gte, lte - Date comparisons (gt=after, lt=before, gte=on or after, lte=on or before): Sub-operators (no value): today, tomorrow, yesterday, oneWeekAgo, oneWeekFromNow, oneMonthAgo, oneMonthFromNow Sub-operators (value = days): daysAgo, daysFromNow Sub-operator (value = YYYY-MM-DD): exactDate Examples: (created_at,eq,today) Created today (due_date,lt,today) Overdue (before today) (updated_at,gt,oneWeekAgo) Updated after one week ago (event_date,eq,exactDate,2024-06-15) On exact date (deadline,lt,exactDate,2024-12-31) Before Dec 31, 2024 (created_at,gte,daysAgo,7) Created within last 7 days Date ranges - btw/nbtw are NOT supported on date fields. Use two bounds: (event_date,gte,exactDate,2024-01-01)~and(event_date,lte,exactDate,2024-12-31) in - Match any of several exact dates (sub-operator required): (due_date,in,exactDate,2024-06-15,2024-07-01) Null checks for dates (no sub-operator): (due_date,blank) Date is not set (due_date,notblank) Date is set LOGICAL OPERATIONS: IMPORTANT: Use ~and, ~or, ~not (with tilde). Plain "and"/"or" will error, and so does "~AND"/"~OR" â the operators are lowercase. AND: (filter1)~and(filter2) Example: (name,eq,John)~and(age,gte,18) OR: (filter1)~or(filter2) Example: (status,eq,active)~or(status,eq,pending) NOT: ~not(filter) Example: ~not(is_deleted,checked) CRITICAL â never put whitespace after ~and/~or/~not. A space or newline before them is fine; one after them is a parse error. Write the whole clause on one line. CORRECT: (a,eq,1)~and(b,eq,2) WRONG: (a,eq,1)~and (b,eq,2) ~not only starts an expression or a group. To negate a later term, wrap it: CORRECT: (a,eq,1)~and(~not(b,checked)) WRONG: (a,eq,1)~and~not(b,checked) Nested grouping works: ((status,eq,active)~or(status,eq,pending))~and(country,eq,USA) For a single field, 'in' is shorter: (status,in,active,pending)~and(country,eq,USA) SPECIAL VALUES: NULL value: (field,eq,null) Empty string: (field,eq,'') or (field,eq,"") Value with comma: (field,eq,"hello, world") Value with quotes: (field,eq,"it's here") or (field,eq,'say "hello"') Field with spaces: (Full Name,eq,John) Quotes optional: ("Full Name",eq,John) NOTE: a field name must not carry a trailing space â (name ,eq,John) reports "field 'name ' not found". A trailing space in a VALUE is kept, so (name,eq,John ) filters on "John " and silently matches nothing. EXAMPLES: Active users this month: (status,eq,active)~and(created_at,isWithin,pastMonth) Overdue high-priority: (due_date,lt,today)~and(priority,eq,high)~and(completed,notchecked) Orders $100-$500 pending: (amount,gte,100)~and(amount,lte,500)~and(status,in,pending,processing) Updated recently, not archived: (updated_at,isWithin,pastNumberOfDays,14)~and(is_archived,notchecked) Multiple segments & countries: (Segment,in,Government,Enterprise)~and(Country,in,Germany,France)
nocodbmcp_readattachmentRead attachments in a recordRead-onlyReadAttachment
Read attachments in a record
Inputs
filesarrayrequired- List of attachment objects from NocoDB. Each attachment must include title, mimeType, size, and either a URL or a path.
nocodbmcp_addfieldoptionsAdd select options (choices) to a single/multi select fieldWriteAdd Field Options
Add select options (choices) to a single/multi select field
Inputs
choicesarrayrequired- Choices to add, e.g. [{ "title": "Open" }]
fieldIdstringrequired- Field/column ID
nocodbmcp_addsortAdd a sort to a viewWriteAdd Sort
Add a sort to a view
Inputs
field_idstringrequired- Field/column ID or exact title to sort by
viewIdstringrequired- View ID
directionstring- Sort direction (default: asc)one of
ascdesc order_bystring- SingleSelect only: 'option_order' sorts by the field's option order instead of alphabetically (default: alphabetical)one of
alphabeticaloption_order
nocodbmcp_addworkflownodeAdd one node to an automation's draft.WriteAdd Workflow Node
Add one node to an automation's draft. Edits one node of the draft in place, so you do not have to send the whole graph. The read-mutate-write is done server-side, which keeps the last-write-wins window against a human editing in the UI down to this one request. Use updateWorkflow instead for bulk authoring or fan-out/merge topologies. The node lands unconnected â wire it with connectWorkflowNodes. `validate` is only usable on a trigger here, because an unconnected node has nothing feeding it; test every other node from connectWorkflowNodes or validateWorkflowNode once it is wired.
Inputs
nodeobjectrequired- No description.
workflowIdstringrequired- Automation ID
validateboolean- Test the node afterwards and store the result the way the UI does. The test is a check, not a run: the node does not perform its action â a create-record node writes no row, a messaging node posts nothing. It resolves the node's config against the upstream results and checks it with read-only calls (does the table have every field set, does a GET endpoint answer), and the result is marked `simulated: true`. A missing expression path is not caught â it resolves to empty, so read `input` in the result. A node that can only be checked by running it (a script, a node that declares no outputs) comes back failed with `needsRun: true` and a `nextStep`; it cannot be run over MCP. Static checks run either way. A node can only be tested once every node upstream of it has been tested, so work in order from the trigger. The edit itself is never rolled back by a test: if the test cannot run or fails, the edit stands and the reason comes back as `testError` instead of `testResult`.
nocodbmcp_buildinterfacepageconfigfromviewBuild a page config seeded from an existing table view â returns a complete `config` to pass to createInterfacePage or updateInterfacePage.WriteBuild Interface Page Config From View
Build a page config seeded from an existing table view â returns a complete `config` to pass to createInterfacePage or updateInterfacePage. Keys the view cannot supply are defaulted (a kanban's stacking field, a calendar/timeline/gantt date anchor: the first eligible column, or blank when the table has none) â check them before you save. Writes nothing.
Inputs
fk_model_idstringrequired- Source table ID
layoutstringrequired- Page layout: table, record_review, dashboard, form, overview, record_detail, or custom. Immutable after creation.one of
tablerecord_reviewdashboardformoverviewrecord_detailcustom settingsarrayrequired- Which view settings to copy across
sourceViewIdstringrequired- View to seed the config from
visualizationstring- Target visualization type (table layouts)one of
gridgallerykanbanlistcalendartimelinegantt
nocodbmcp_calltoolInvoke a tool revealed by listTools.WriteCall Tool
Invoke a tool revealed by listTools. Arguments are validated against that tool's schema exactly as they would be on a direct call.
Inputs
namestringrequired- Tool name, as returned by listTools
argumentsobject- Arguments object matching the tool's inputSchema
nocodbmcp_clearinterfacepagedraftRevert a page's draft config to its last published state.WriteClear Interface Page Draft
Revert a page's draft config to its last published state. Works only on pages a human has already published in the UI. Returns the reverted page. A page carries `password_protected` (boolean), not `password`.
Inputs
pageIdstringrequired- Interface page ID
nocodbmcp_connectworkflownodesAdd one edge to an automation's draft.WriteConnect Workflow Nodes
Add one edge to an automation's draft. Edits one node of the draft in place, so you do not have to send the whole graph. The read-mutate-write is done server-side, which keeps the last-write-wins window against a human editing in the UI down to this one request. Use updateWorkflow instead for bulk authoring or fan-out/merge topologies. A node with a single output port takes exactly one outgoing edge; a branching node (more than one output port, e.g. core.flow.if) needs sourcePortId on every outgoing edge. Wiring a node changes what feeds it, so its test result and everything downstream is cleared.
Inputs
sourcestringrequired- Source node id
targetstringrequired- Target node id
workflowIdstringrequired- Automation ID
labelstring- No description.
sourcePortIdstring- Required on every outgoing edge of a branching node
targetPortIdstring- No description.
validateboolean- Test the node afterwards and store the result the way the UI does. The test is a check, not a run: the node does not perform its action â a create-record node writes no row, a messaging node posts nothing. It resolves the node's config against the upstream results and checks it with read-only calls (does the table have every field set, does a GET endpoint answer), and the result is marked `simulated: true`. A missing expression path is not caught â it resolves to empty, so read `input` in the result. A node that can only be checked by running it (a script, a node that declares no outputs) comes back failed with `needsRun: true` and a `nextStep`; it cannot be run over MCP. Static checks run either way. A node can only be tested once every node upstream of it has been tested, so work in order from the trigger. The edit itself is never rolled back by a test: if the test cannot run or fails, the edit stands and the reason comes back as `testError` instead of `testResult`.
nocodbmcp_createautomationfolderCreate an automation folder in the current base.WriteCreate Automation Folder
Create an automation folder in the current base.
Inputs
titlestringrequired- Folder title
ordernumber- Order among the base sidebar
nocodbmcp_createcommentAdd a comment to a recordWriteCreate Comment
Add a comment to a record
Inputs
commentstringrequired- Comment text
recordIdstringrequired- Record ID
tableIdstringrequired- Table ID
nocodbmcp_createdashboardCreate a new dashboard in a baseWriteCreate Dashboard
Create a new dashboard in a base
Inputs
titlestringrequired- Dashboard title
descriptionstring- Dashboard description
nocodbmcp_createfieldAdd a new field (column) to a tableWriteCreate Field
Add a new field (column) to a table
Inputs
fieldobjectrequired- Field definition (title, type and type-specific options).
tableIdstringrequired- Table ID
nocodbmcp_createfilterCreate a filter (or filter group) on a viewWriteCreate Filter
Create a filter (or filter group) on a view
Inputs
filterstringrequired- Filter definition. A filter group has the shape { group_operator: "AND"|"OR", filters: [{ field_id, operator, value }, ...] } and groups may be nested inside `filters`.
viewIdstringrequired- View ID
nocodbmcp_createfolderCreate a new folder in the current base to group tables, documents and dashboards in the sidebar.WriteCreate Folder
Create a new folder in the current base to group tables, documents and dashboards in the sidebar.
Inputs
titlestringrequired- Folder title
ordernumber- Position in the shared sidebar sequence folders and unfoldered tables, documents and dashboards share
sourceIdstring- Owning source; defaults to the base default source
nocodbmcp_createinterfaceCreate a new interface in the current base.WriteCreate Interface
Create a new interface in the current base. Writes only touch the draft; publishInterface makes it live. Unpublishing and sharing a page publicly are deliberately not exposed â a human does those in the UI.
Inputs
titlestringrequired- Interface title
descriptionstring- Interface description
hiddenboolean- Hide the interface from the navigation
metaobject- Appearance meta â JSON object: { icon?, color?, theme?: { accent?, style? }, restrict_sharing? }.
nocodbmcp_createinterfacepageCreate a new page on an interface.WriteCreate Interface Page
Create a new page on an interface. Call getInterfaceAuthoringInstructions first if you are authoring a config. Writes only touch the draft; publishInterface makes it live. Unpublishing and sharing a page publicly are deliberately not exposed â a human does those in the UI. A page carries `password_protected` (boolean), not `password`.
Inputs
fk_interface_idstringrequired- Parent interface ID
layoutstringrequired- Page layout: table, record_review, dashboard, form, overview, record_detail, or custom. Immutable after creation.one of
tablerecord_reviewdashboardformoverviewrecord_detailcustom titlestringrequired- Page title
configobject- Layout-specific JSON config (draft). Its shape depends on the page layout and is keyed by column/view/page IDs. Do not guess its keys â call getInterfacePageConfigSchema(layout) for the exact JSON Schema this config is validated against, getInterfaceAuthoringInstructions for the authoring model, and getInterfacePageMeta to discover the column IDs of the source table.
fk_model_idstring- Source table ID (required for all layouts except overview)
metaobject- Appearance meta â JSON object: { icon?, color?, theme?: { accent?, style? }, restrict_sharing? }.
show_in_navboolean- Show the page in the interface navigation
visual_variantstring- Render variant: page, modal or sidesheetone of
pagemodalsidesheet
nocodbmcp_createrecordfromtemplateCreate a record from a saved template.WriteCreate Record From Template
Create a record from a saved template. This is not one record: the payload may carry `linked_records` in 'create_new' mode, and each of those creates a record in the linked table and links it, up to 3 levels deep. A link whose field no longer resolves is skipped without an error, so read the record back if the links matter. Returns the new top-level record id.
Inputs
templateIdstringrequired- Template ID â from listRecordTemplates
fieldsobject- Top-level field values that replace the template's for this record only, keyed like createRecords. The template is unchanged. Link fields come from the template's linked_records and cannot be set here.
tableIdstring- Table the template belongs to. Optional â defaults to the template's own table, and any other table is refused
nocodbmcp_createrecordtemplateSave a starter record for a table.WriteCreate Record Template
Save a starter record for a table. Titles are unique per table, and the payload is capped at 256 KB. Creating a template writes no records â `createRecordFromTemplate` does that.
Inputs
tableIdstringrequired- Table the template belongs to
template_dataobjectrequired- The record this template writes
titlestringrequired- Template title, unique within the table
descriptionstring- What the template is for
nocodbmcp_createtableCreate a new table in a baseWriteCreate Table
Create a new table in a base
Inputs
titlestringrequired- Table title
descriptionstring- Table description
fieldsarray- Field definitions to create with the table (each needs a title and type).
source_idstring- Optional data source ID for external sources
nocodbmcp_createviewCreate a new view on a table.WriteCreate View
Create a new view on a table. A gallery/kanban view answers with `options.cover_field_id`, the key these tools accept back.
Inputs
tableIdstringrequired- Table ID
titlestringrequired- View title
typestringrequired- View typeone of
gridgalleryformkanbancalendarmapgantttimelinelist fieldsarray- Complete ordered field list. Array order sets the field order; every field omitted is hidden. An empty array hides all but the display-value field. Read the current list from `getView`.
lock_typestring- View mode: collaborative (anyone with access may edit), personal (only the owner sees their config) or locked (config is read-only for editors and below; creators and owners can still change or delete it)one of
collaborativelockedpersonal optionsobject- View-type-specific options. kanban stacks by the first SingleSelect field unless stack_by is given (a field id or { field_id }); calendar and timeline require date_ranges
nocodbmcp_createviewfolderCreate a view folder in a table.WriteCreate View Folder
Create a view folder in a table. New folders always append to the folder tier, so order cannot be set here.
Inputs
tableIdstringrequired- Table ID
titlestringrequired- Folder title
nocodbmcp_createwidgetCreate a new widget on a dashboard.WriteCreate Widget
Create a new widget on a dashboard. `options` must match `type` and is refused if the widget could only render nothing â a chart with no data block, a summary metric with no field, an iframe with no url, a field_id the table does not have, an aggregation the column cannot take. Read getWidgetConfigSchema(type) first rather than guessing; chart_type is limited to pie/donut/bar/line here. A chart or metric also needs table_id.
Inputs
dashboardIdstringrequired- Dashboard ID
titlestringrequired- Widget title
typestringrequired- Widget typeone of
chartmetrictextiframe descriptionstring- Widget description
optionsobject- Widget configuration, in the v3 snake_case dialect (`chart_type`, `field_id`, `data_source`) â NOT the camelCase spelling interface pages store. Shape depends on `type`: chart â `chart_type` plus the `data` block that chart type needs; metric â `metric.type` and `metric.aggregation`; text â `content`; iframe â `url`. Creatable chart_type: pie, donut, bar, line. Call getWidgetConfigSchema(type) for the exact JSON Schema.
positionobject- Position on the dashboard grid, which is 4 columns wide (NOT 12) â x + w must not exceed 4. Per-type resize bounds: metric: w 1-4, h 2-6; chart: w 2-2, h 5-6; text: w 2-4, h from 1; iframe: w 2-4, h 5-12. Omit to have the widget appended below the existing ones.
table_idstring- Source table ID â required for chart and metric widgets
view_idstring- Source view ID â required when data_source is 'view'
nocodbmcp_createworkflowCreate an automation.WriteCreate Workflow
Create an automation. Only the draft is writable. Testing one node is exposed (the `validate` flag, and validateWorkflowNode), and publishWorkflow puts the tested draft live. Enabling and run_as are deliberately not exposed â a human sets those in the UI. Call getWorkflowAuthoringInstructions first if you are writing a draft.
Inputs
titlestringrequired- Automation title
descriptionstring- Automation description
draftobject- The whole draft graph, replacing whatever is stored. Writes replace the whole draft graph, so always getWorkflow first, mutate the graph it returns, then send it back â and note it is last-write-wins against anyone editing the same automation in the UI. Publishing clears `draft`, so read `draft` when it is set and fall back to `nodes`/`edges` otherwise. `data.testResult` is ignored on write; results are carried forward for every node you leave untouched. To edit one node instead of the whole graph, use addWorkflowNode / updateWorkflowNode / deleteWorkflowNode and connectWorkflowNodes / disconnectWorkflowNodes.
nocodbmcp_disconnectworkflownodesRemove the edge between two nodes of an automation's draft.WriteDisconnect Workflow Nodes
Remove the edge between two nodes of an automation's draft. Edits one node of the draft in place, so you do not have to send the whole graph. The read-mutate-write is done server-side, which keeps the last-write-wins window against a human editing in the UI down to this one request. Use updateWorkflow instead for bulk authoring or fan-out/merge topologies. The nodes stay; only the edge goes. Test results for the target and everything below it are cleared.
Inputs
sourcestringrequired- Source node id
targetstringrequired- Target node id
workflowIdstringrequired- Automation ID
sourcePortIdstring- Only remove the edge leaving this port. Omit to remove every edge from source to target.
nocodbmcp_duplicatebaseCopy the base this connection is scoped to, into the same workspace.WriteDuplicate Base
Copy the base this connection is scoped to, into the same workspace. The new base id is known straight away and reported as `id` even while the contents are still being copied, so a timeout or a failure here still leaves you something to work with â but the copy is only complete once `status` is completed. A duplicated base is removed in the UI, or with deleteBase where the connection has it switched on.
Inputs
exclude_dashboardsboolean- Skip dashboards
exclude_databoolean- Copy the schema only, leaving every table empty
exclude_hooksboolean- Skip webhooks
exclude_interfacesboolean- Skip interfaces
exclude_scriptsboolean- Skip scripts
exclude_viewsboolean- Copy only each table default view
exclude_workflowsboolean- Skip automations
nocodbmcp_duplicatefieldCopy a field within its table, including its cell values.WriteDuplicate Field
Copy a field within its table, including its cell values. Formula, Lookup and Rollup copies keep pointing at the same referenced fields. Waits for the copy to finish, then returns the new `id`, `title` and `type` plus the `job_id` that ran it â not the whole field; read it back with listFields. If the job outruns the 60s wait the reply is `status: "running"` with the job_id and no id â poll getJobStatus for it.
Inputs
fieldIdstringrequired- Field/column ID to duplicate
exclude_databoolean- Create the field empty instead of copying cell values
nocodbmcp_duplicateinterfaceDuplicate an interface with all of its pages (draft state)WriteDuplicate Interface
Duplicate an interface with all of its pages (draft state)
Inputs
interfaceIdstringrequired- Interface ID to duplicate
nocodbmcp_duplicateinterfacepageDuplicate a page within its interface (draft state)WriteDuplicate Interface Page
Duplicate a page within its interface (draft state)
Inputs
pageIdstringrequired- Interface page ID
nocodbmcp_duplicatetableCopy a table into the same base, with its fields, views, data and webhooks.WriteDuplicate Table
Copy a table into the same base, with its fields, views, data and webhooks. The copy is titled "<title> copy" unless `title` says otherwise. Links to other tables are recreated; links pointing at the copy from elsewhere are not. Waits for the copy to finish, then returns the new `id` and `title` plus the `job_id` that ran it â not the whole table; read it back with getTableSchema. If the job outruns the 60s wait the reply is `status: "running"` with the job_id and no id â poll getJobStatus for it.
Inputs
tableIdstringrequired- Table ID to duplicate
exclude_databoolean- Copy the schema only, leaving the copy empty
exclude_hooksboolean- Leave the webhooks behind
exclude_viewsboolean- Copy only the default view
titlestring- Title for the copy. De-duplicated if already taken
nocodbmcp_duplicateviewCopy a view on the same table, with its filters, sorts, grouping and field layout.WriteDuplicate View
Copy a view on the same table, with its filters, sorts, grouping and field layout. Unlike the other duplicate tools this is immediate â no job. A shared-view link is not carried over.
Inputs
viewIdstringrequired- View ID to duplicate
titlestring- Title for the copy. Defaults to a numbered copy
nocodbmcp_duplicateworkflowDuplicate an automation into the same baseWriteDuplicate Workflow
Duplicate an automation into the same base
Inputs
workflowIdstringrequired- Automation ID to duplicate
nocodbmcp_exportcsvExport a table or view as CSV text, with the field order, visibility, filters and sorts of the view.WriteExport Csv
Export a table or view as CSV text, with the field order, visibility, filters and sorts of the view. Decimal and Currency carry their stored value, not the field display precision. Returns the CSV inline, so it is capped â narrow the export with a filtered view rather than raising the cap.
Inputs
delimiterstring- Field delimiter (default ",")
maxRowsinteger- Data rows to export, excluding the header (default 1000)
tableIdstring- Table ID. Optional when `viewId` is given
viewIdstring- View whose fields, filters and sorts shape the export. Defaults to the table default view
nocodbmcp_exportexcelExport a table or view as an .xlsx workbook and return a download link.WriteExport Excel
Export a table or view as an .xlsx workbook and return a download link. The file is written to storage and the link is signed for 3 hours â the bytes are not returned, so this is for handing a spreadsheet to a person, not for reading the data. Use `exportCsv` to read rows, or `queryRecords` to work with them. Capped at `maxRows`, like exportCsv; `truncated` says whether the view held more. For a full export, use a filtered view or the UI.
Inputs
filenameTimeZonestring- IANA zone for the timestamp in the filename, e.g. Europe/Berlin (default UTC)
maxRowsinteger- Data rows to export, excluding the header (default 1000)
tableIdstring- Table ID. Optional when `viewId` is given
viewIdstring- View whose fields, filters and sorts shape the export. Defaults to the first non-personal view of the table
nocodbmcp_generateskillguideReturn a bundle of skill files describing this MCP surface as this credential actually sees it, to write under `.claude/skills/nocodb-mcp`; `SKILL.md` is the entry point.WriteGenerate Skill Guide
Return a bundle of skill files describing this MCP surface as this credential actually sees it, to write under `.claude/skills/nocodb-mcp`; `SKILL.md` is the entry point. Carries what tool schemas structurally cannot: which tool answers which goal, the invariants that make a call succeed silently without doing anything, the read-back that proves a write landed, and what each error string really means. Call it once at the start of a session, or with `sections: ["scope"]` to refresh just the reachable workspaces and bases.
Inputs
sectionsarray- Which files to return. Omit for the whole bundle. 'scope' is the reachable workspaces and bases, which is the one file worth refreshing on its own.
nocodbmcp_getappurlWhere a resource lives in the NocoDB web app â the link to hand a person.WriteGet App Url
Where a resource lives in the NocoDB web app â the link to hand a person. Returns `url`, or `url_path` alone when the server does not know its public origin; an interface also gets the builder as `edit_url`. Pass `kind` plus the ids it needs: table (tableId), view (tableId, viewId), workflow (workflowId), interface (interfaceId, optional pageId), dashboard (dashboardId), script (scriptId), document (documentId), base (no ids), record (tableId, recordId, optional viewId â opens the record expanded).
Inputs
kindstringrequired- Which kind of resource to link toone of
basetableviewrecordworkflowinterfacedashboardscriptdocument dashboardIdstring- For kind dashboard
documentIdstring- For kind document
interfaceIdstring- For kind interface
pageIdstring- Optional, for kind interface: deep-link to one page
recordIdstring- For kind record: the record id (primary key value)
scriptIdstring- For kind script
tableIdstring- For kind table, view or record
viewIdstring- For kind view; optional for kind record
workflowIdstring- For kind workflow
nocodbmcp_getbaseschemaEvery table in the base with its fields and views, in one call â the orientation read, in place of one getTableSchema per table.WriteGet Base Schema
Every table in the base with its fields and views, in one call â the orientation read, in place of one getTableSchema per table. Field options (select choices, relation targets, formulas) are included. Per-view field visibility, filters and sorts are not â read those from the view. Members are not listed; listBaseMembers reports them with the roles enforcement actually resolves.
Inputs
This tool takes no inputs.
nocodbmcp_getdashboardGet a dashboard by ID, optionally including its widgetsWriteGet Dashboard
Get a dashboard by ID, optionally including its widgets
Inputs
dashboardIdstringrequired- Dashboard ID
includeWidgetsboolean- Include widgets in the response
nocodbmcp_getdashboarddataGet the computed data for all widgets of a dashboardWriteGet Dashboard Data
Get the computed data for all widgets of a dashboard
Inputs
dashboardIdstringrequired- Dashboard ID
nocodbmcp_getdatedependencyRead the date dependency rule of a table, or of one Gantt view.WriteGet Date Dependency
Read the date dependency rule of a table, or of one Gantt view. Returns null when no rule is configured. A rule links a start field, an end field and a link field so moving one record shifts the records that depend on it.
Inputs
tableIdstringrequired- Table ID
ganttViewIdstring- This Gantt view's own rule. Omit for the table-level default
nocodbmcp_getexecutionGet one run of an automation, including its node resultsWriteGet Execution
Get one run of an automation, including its node results
Inputs
executionIdstringrequired- Run ID
workflowIdstringrequired- Automation ID
nocodbmcp_getfieldGet a single field (column) by IDWriteGet Field
Get a single field (column) by ID
Inputs
fieldIdstringrequired- Field/column ID
nocodbmcp_getfieldoptionsschemaGet the exact JSON Schema for a field `options` of the given type â the shape createField, updateField and createTable validate against.WriteGet Field Options Schema
Get the exact JSON Schema for a field `options` of the given type â the shape createField, updateField and createTable validate against. Read this before authoring options by hand: `options` is not modelled in those tools, and an unknown key is rejected for every type that takes options.
Inputs
typestringrequired- No description.one of
SingleLineTextLongTextPhoneNumberURLEmailNumberDecimalCurrencyPercentDurationDateDateTimeTimeYearSingleSelectMultiSelectRatingCheckboxAttachmentJSONGeometryLookupRollupButtonFormulaBarcodeQrCodeCreatedTimeLastModifiedTimeCreatedByLastModifiedByLinkToAnotherRecordUser
nocodbmcp_getinterfaceGet one interface by IDWriteGet Interface
Get one interface by ID
Inputs
interfaceIdstringrequired- Interface ID
nocodbmcp_getinterfacepageGet one interface page, including its draft `config`.WriteGet Interface Page
Get one interface page, including its draft `config`. Read this before updating a page â an update replaces the whole config. `draft_visible` is false for roles that cannot see drafts: `config` is then the published snapshot, not the draft, so do not use it as the base of an update. A page carries `password_protected` (boolean), not `password`.
Inputs
pageIdstringrequired- Interface page ID
nocodbmcp_getinterfacepageconfigschemaGet the exact JSON Schema for a page `config` of the given layout â the authoritative shape createInterfacePage and updateInterfacePage validate against, generated from the same server-side schema.WriteGet Interface Page Config Schema
Get the exact JSON Schema for a page `config` of the given layout â the authoritative shape createInterfacePage and updateInterfacePage validate against, generated from the same server-side schema. Read this before authoring a config by hand instead of guessing its keys. Recursive filter groups appear as a JSON Schema `$ref` self-reference; every other key is inlined and exact.
Inputs
layoutstringrequired- Page layout to look up: table, record_review, dashboard, form, overview, record_detail, or custom.one of
tablerecord_reviewdashboardformoverviewrecord_detailcustom
nocodbmcp_getinterfacepagemetaGet the projected source-table metadata for a page (columns with their IDs, related metas).WriteGet Interface Page Meta
Get the projected source-table metadata for a page (columns with their IDs, related metas). Use this to discover the column IDs a page config must reference.
Inputs
pageIdstringrequired- Interface page ID
envstring- Which snapshot to read: draft (builders only) or published. Defaults to draft for builders.one of
draftpublished vizIdstring- Dashboard pages only: the "view" widget whose source table to project.
nocodbmcp_getinterfacewidgetdataGet the computed data for one widget of a dashboard pageWriteGet Interface Widget Data
Get the computed data for one widget of a dashboard page
Inputs
pageIdstringrequired- Dashboard interface page ID
widgetIdstringrequired- Widget ID (from the page config)
envstring- Which snapshot to read: draft (builders only) or published. Defaults to draft for builders.one of
draftpublished
nocodbmcp_getjobstatusStatus of a background job started by one of the duplicate tools.WriteGet Job Status
Status of a background job started by one of the duplicate tools. `status` is waiting, active, completed or failed; a completed job carries the new entity id in `result`.
Inputs
jobIdstringrequired- Job ID returned by a duplicate tool
nocodbmcp_getrecordtemplateRead one record template in full, including the `template_data` payload it writes: `fields` (field title â value) and `linked_records` (link field id â records to link or create).WriteGet Record Template
Read one record template in full, including the `template_data` payload it writes: `fields` (field title â value) and `linked_records` (link field id â records to link or create).
Inputs
templateIdstringrequired- Template ID â from listRecordTemplates
nocodbmcp_getviewGet a single view by ID.WriteGet View
Get a single view by ID. A gallery/kanban view answers with `options.cover_field_id`, the key these tools accept back.
Inputs
viewIdstringrequired- View ID
nocodbmcp_getwidgetGet a single widget by ID.WriteGet Widget
Get a single widget by ID. Adds `problems` when the widget would render nothing, checked live against the table as it is now â trust it over the stored `error` flag, which is only recomputed when the widget itself is written and so reads `false` for a widget broken later by a column being deleted.
Inputs
widgetIdstringrequired- Widget ID
nocodbmcp_getwidgetconfigschemaGet the exact JSON Schema for a widget `options` of the given type â the shape createWidget and updateWidget validate against.WriteGet Widget Config Schema
Get the exact JSON Schema for a widget `options` of the given type â the shape createWidget and updateWidget validate against. Read this before authoring options by hand. Note the dialect: dashboard widgets are snake_case (`chart_type`, `field_id`), while an interface page stores the camelCase form of the same config.
Inputs
typestringrequired- Widget type. Only these four are creatable through the API â a dashboard can also hold gauge/table/pivot widgets, but only the UI can add those. `options` must match the type: see getWidgetConfigSchema(type) for the exact shape.one of
chartmetrictextiframe
nocodbmcp_getwidgetdataGet the computed data for a single widgetWriteGet Widget Data
Get the computed data for a single widget
Inputs
widgetIdstringrequired- Widget ID
nocodbmcp_getworkflowGet one automation, including its editable `draft` graph and the published `nodes`/`edges`.WriteGet Workflow
Get one automation, including its editable `draft` graph and the published `nodes`/`edges`. Start here before any write: Writes replace the whole draft graph, so always getWorkflow first, mutate the graph it returns, then send it back â and note it is last-write-wins against anyone editing the same automation in the UI. Publishing clears `draft`, so read `draft` when it is set and fall back to `nodes`/`edges` otherwise. `data.testResult` is ignored on write; results are carried forward for every node you leave untouched. To edit one node instead of the whole graph, use addWorkflowNode / updateWorkflowNode / deleteWorkflowNode and connectWorkflowNodes / disconnectWorkflowNodes.
Inputs
workflowIdstringrequired- Automation ID
nocodbmcp_groupbyrecordsCount records per distinct value of a field â "appointments per status".WriteGroup By Records
Count records per distinct value of a field â "appointments per status". Returns each value with its count, so a follow-up queryRecords can filter to one group.
Inputs
fieldIdstringrequired- Field to group by â its id or exact title, from listFields or getTableSchema
tableIdstringrequired- Table ID
filterstring- Structured filter â the same shape as createFilter: a single condition { field, operator, value }, or a group { group_operator: "AND"|"OR", filters: [...] } whose members may themselves be groups. Field names and values are quoted for you, so commas, parentheses and quotes in either are safe. Prefer this over `where`; pass only one of the two.
limitnumber- Maximum groups to return
offsetnumber- Groups to skip
sortstring- Field title to sort the groups by; prefix with - for desc
wherestring- Filter records using NocoDB query syntax, e.g. (status,eq,active)~and(amount,gte,100). For the complete operator list, date sub-operators, quoting rules and examples, see the `where` parameter of the `queryRecords` tool â the syntax is identical.
nocodbmcp_importcsvLoad CSV text into the base â either as a new table, or as rows appended to an existing one.WriteImport Csv
Load CSV text into the base â either as a new table, or as rows appended to an existing one. Runs to completion and reports the rows actually written. Values are coerced to the destination field type on append, so importing into a table you created with the right field types is preferred. An append that would create more than 5000 links (one per value in a Links field cell) is refused before any row is written â split such a CSV into smaller imports up front.
Inputs
csvstringrequired- The CSV content itself, including the header row
firstRowAsHeadersboolean- Whether the first row holds field names (default true). When false, fields are named positionally
tableIdstring- Append to this existing table. Headers are matched to fields by title, then by column name; unmatched headers are skipped and reported. Omit to create a new table instead
tableNamestring- Create a new table with this title, one field per CSV column. Every field is created as SingleLineText â type detection is switched off in the import pipeline â so either convert them afterwards with updateField, or create the table with createTable first and import with tableId. Mutually exclusive with tableId
nocodbmcp_linkrecordsAdd links from records in this table to records in the linked table through a link field.WriteLink Records
Add links from records in this table to records in the linked table through a link field. On a many-to-many or has-many field existing links are kept; use updateRecords to replace a whole set, unlinkRecords to remove. A many-to-one, belongs-to or one-to-one field takes one target per record; more is refused, and one target replaces any existing link on that record. A one-to-one or has-many target already linked elsewhere is moved, and its previous link is removed without a warning. Reports per-record ok/error â one bad record does not fail the rest.
Inputs
fieldIdstringrequired- Link field ID or title, e.g. from getTableSchema
recordsarrayrequired- One entry per record on this table. At most 100 entries per call.
tableIdstringrequired- Table ID
nocodbmcp_linkrecordsbydisplayvalueLink records by what they are called rather than by id: pass the display values (titles) of the records on the linked table.WriteLink Records By Display Value
Link records by what they are called rather than by id: pass the display values (titles) of the records on the linked table. Adds to the existing links, exactly like linkRecords â use updateRecords to replace a whole set, unlinkRecords to remove. Matching is exact, so a title that matches no record comes back under `unmatched` instead of being dropped. A title several records share is refused: that entry links nothing and returns the candidate ids under `ambiguous`, to retry with linkRecords.
Inputs
fieldIdstringrequired- Link field ID or title, e.g. from getTableSchema
recordsarrayrequired- One entry per record on this table. At most 100 entries per call.
tableIdstringrequired- Table ID holding the link field
nocodbmcp_listautomationfoldersList the automation folders of the current base with the workflows and scripts inside each, plus the unfoldered automations under `topLevel`.WriteList Automation Folders
List the automation folders of the current base with the workflows and scripts inside each, plus the unfoldered automations under `topLevel`. Folders are interleaved with the unfoldered automations in the sidebar. Use the ids reported here with `moveAutomationToFolder`.
Inputs
This tool takes no inputs.
nocodbmcp_listbaseauditsThe audit log of the whole base â schema and record changes across every table, newest first by default.WriteList Base Audits
The audit log of the whole base â schema and record changes across every table, newest first by default. Filter by actor, event type or date range to keep the answer small. Cursor-paginated: pass the `next` value the previous answer returned to get the following page. Absent `next` means the last page.
Inputs
cursorstring- Page cursor from a previous call
endDatestring- ISO date â only events at or before this instant
orderBystring- Order by event time (default desc)one of
ascdesc startDatestring- ISO date â only events at or after this instant
typearray- Only these audit event types (e.g. DATA_UPDATE)
userIdstring- Only events by this user id
nocodbmcp_listbasemembersList the users, teams, agents and roles of this base â the subjects a permission grant or RLS policy can be assigned to.WriteList Base Members
List the users, teams, agents and roles of this base â the subjects a permission grant or RLS policy can be assigned to. `roles` is split by consumer: a grant accepts fewer roles than an RLS policy does
Inputs
This tool takes no inputs.
nocodbmcp_listcommentsList comments on a recordWriteList Comments
List comments on a record
Inputs
recordIdstringrequired- Record ID
tableIdstringrequired- Table ID
nocodbmcp_listdashboardsList dashboards in a baseWriteList Dashboards
List dashboards in a base
Inputs
This tool takes no inputs.
nocodbmcp_listexecutionsList past runs of an automationWriteList Executions
List past runs of an automation
Inputs
workflowIdstringrequired- Automation ID
limitinteger- Page size, 1-200. Defaults to 25
offsetinteger- Rows to skip
nocodbmcp_listfieldsList all fields (columns) of a tableWriteList Fields
List all fields (columns) of a table
Inputs
tableIdstringrequired- Table ID
includeSystemboolean- Also return the system CreatedAt, UpdatedAt, CreatedBy and UpdatedBy fields the table has, marked `system: true` â e.g. to sort or filter an interface page by them. Default false.
nocodbmcp_listfiltersList filters of a viewWriteList Filters
List filters of a view
Inputs
viewIdstringrequired- View ID
nocodbmcp_listfoldersList folders in the current base with the tables, documents and dashboards inside each under `children`.WriteList Folders
List folders in the current base with the tables, documents and dashboards inside each under `children`. Folders group those entities in the base sidebar. Use the ids reported here with `moveTableToFolder`.
Inputs
This tool takes no inputs.
nocodbmcp_listinterfacepagesList the pages of an interface.WriteList Interface Pages
List the pages of an interface. Returns {list: [pages...]}. `draft_visible` is false for roles that cannot see drafts: `config` is then the published snapshot, not the draft, so do not use it as the base of an update. A page carries `password_protected` (boolean), not `password`.
Inputs
interfaceIdstringrequired- Interface ID
nocodbmcp_listinterfacesList the interfaces (end-user: target.user apps) of the current baseWriteList Interfaces
List the interfaces (end-user: target.user apps) of the current base
Inputs
This tool takes no inputs.
nocodbmcp_listlinkedrecordsPage through the records linked to one row through a Link field.WriteList Linked Records
Page through the records linked to one row through a Link field. queryRecords already inlines links up to its page limit â use this when there are more than that. Returns { record: {...} | null } for one-to-one and belongs-to, and { records: [...] } for every other relation type â many-to-one included, even though it links at most one record.
Inputs
fieldIdstringrequired- The Link field ID
recordIdstringrequired- Primary key of the source record, from queryRecords
tableIdstringrequired- Table ID holding the link field
limitinteger- Maximum linked records (default 25, capped at 100)
offsetinteger- Linked records to skip. Use `next_offset` / `prev_offset` from the response.
nocodbmcp_listpermissionsList permission grants configured in this base.WriteList Permissions
List permission grants configured in this base. Only tables/fields with an explicit grant appear â anything absent follows the base roles
Inputs
entitystring- Entity the permission is attached toone of
tablefield tableIdstring- Restrict to grants on this table and on its fields
nocodbmcp_listrecordauditsThe change history of one record â who changed which field, from what to what, and when.WriteList Record Audits
The change history of one record â who changed which field, from what to what, and when. Cursor-paginated: pass the `next` value the previous answer returned to get the following page. Absent `next` means the last page.
Inputs
recordIdstringrequired- Record ID (primary key value), as records tools report it
tableIdstringrequired- Table ID the record belongs to
cursorstring- Page cursor from a previous call
nocodbmcp_listrecordtemplatesList the saved record templates of a base, or of one table.WriteList Record Templates
List the saved record templates of a base, or of one table. A template is a named starter record â field values plus linked records â that `createRecordFromTemplate` stamps out. The payload itself is omitted here; read one template with `getRecordTemplate`.
Inputs
tableIdstring- Only templates of this table. Omit for the whole base
nocodbmcp_listsortsList sorts of a viewWriteList Sorts
List sorts of a view
Inputs
viewIdstringrequired- View ID
nocodbmcp_listtoolsReveal the write tools for one category.WriteList Tools
Reveal the write tools for one category. This server keeps its schema, automation and configuration tools out of the tool list to save context; read tools and record create/update/delete are listed directly when granted to this credential. Call this to get a category's tool names and argument schemas, then invoke one with callTool.
Inputs
categorystringrequired- Which category of write tools to revealone of
linkstablesfieldsfilterssortsviewsshared-viewsdata-iorecord-templatesdate-dependenciesduplicatesauditsdashboardscommentsrecordsattachmentstrashview-sectionsbase-sectionsautomation-sectionsworkflowsworkflow-nodesinterfaces
nocodbmcp_listtrashWhat is in the base trash â deleted records, tables, views, fields, dashboards, scripts and the rest, newest first.WriteList Trash
What is in the base trash â deleted records, tables, views, fields, dashboards, scripts and the rest, newest first. Each entry carries the trash `id` that `restoreFromTrash` takes (not the id of the resource itself), what it was, who deleted it and when, and `is_restorable` for whether this caller may put it back. An entry is purged for good on the base retention schedule it reports as `cleanup_due_at`, so recovery is only possible until then. Cursor-paginated: pass the `next` value the previous answer returned to get the following page. Absent `next` means the last page.
Inputs
cursorstring- Page cursor from a previous call
limitinteger- Entries per page
resourceTypestring- Only entries of this kind (default: every kind)one of
recordfieldtableviewdashboardwidgetinterfaceinterfacePageworkflowscripthookextensionagentappappSynctableSync
nocodbmcp_listviewfoldersList the view folders of a table along with the views inside each.WriteList View Folders
List the view folders of a table along with the views inside each. View folders group views inside one table, tiered above the loose views.
Inputs
tableIdstringrequired- Table ID
nocodbmcp_listviewsList views of a table.WriteList Views
List views of a table. A gallery/kanban view answers with `options.cover_field_id`, the key these tools accept back.
Inputs
tableIdstringrequired- Table ID
nocodbmcp_listwidgetsList widgets of a dashboardWriteList Widgets
List widgets of a dashboard
Inputs
dashboardIdstringrequired- Dashboard ID
nocodbmcp_listworkflownodetypesList automation node types available here: id, title, category, description, icon, ports, requiredConfigKeys, hidden status, and plan lock status.WriteList Workflow Node Types
List automation node types available here: id, title, category, description, icon, ports, requiredConfigKeys, hidden status, and plan lock status. Defaults to compact summaries. Use `detail: "full"` with a `nodeIds` filter to get the complete form (config keys, validators, and form field metadata) for specific nodes â full detail is expensive and requires a nodeIds filter. Read this before authoring a draft.
Inputs
categorystring- Filter to a specific categoryone of
triggeractionflow detailstring- Response detail level: summary (default) or full formone of
summaryfulldefaultsummary nodeIdsarray- Filter to specific node IDs
nocodbmcp_listworkflowsList the automations (workflows) of the current baseWriteList Workflows
List the automations (workflows) of the current base
Inputs
This tool takes no inputs.
nocodbmcp_moveautomationtofolderMove a workflow or script into an automation folder, or back to the top level with `folderId: null`.WriteMove Automation To Folder
Move a workflow or script into an automation folder, or back to the top level with `folderId: null`. Optionally set its order within the destination.
Inputs
automationIdstringrequired- Workflow or script ID
entitystringrequired- Kind of automation being movedone of
workflowscript folderIdstringrequired- Destination automation folder ID, or null for top level
ordernumber- Order within the destination
nocodbmcp_movetabletofolderMove a table into a base folder, or back to the top level with `folderId: null`.WriteMove Table To Folder
Move a table into a base folder, or back to the top level with `folderId: null`. Folders are interleaved with the unfoldered entities, so pass an explicit `order` per table â omitting it leaves the table on the order it already held, which can collide with the other members of the destination.
Inputs
folderIdstringrequired- Destination folder ID, or null for the top level
tableIdstringrequired- Table ID
ordernumber- Order within the destination
nocodbmcp_moveviewtofolderMove a view into a view folder, or back to the top level with `folderId: null`.WriteMove View To Folder
Move a view into a view folder, or back to the top level with `folderId: null`. Optionally set its order within the destination.
Inputs
folderIdstringrequired- Destination view folder ID, or null for the top level
viewIdstringrequired- View ID
ordernumber- Order within the destination
nocodbmcp_publishinterfacePublish an interface: every draft page is snapshotted live for its end users.WritePublish Interface
Publish an interface: every draft page is snapshotted live for its end users. Pages marked keep-as-draft are skipped. Unpublishing and public share-to-web stay in the UI, so this is one-way here â only publish when the user asked for it.
Inputs
interfaceIdstringrequired- Interface ID
nocodbmcp_publishworkflowPublish an automation: the tested draft becomes the live version and starts running for real on its trigger.WritePublish Workflow
Publish an automation: the tested draft becomes the live version and starts running for real on its trigger. Every node must already be tested (validateWorkflowNode) â publishing is refused otherwise and the refusal names the nodes. Node config is validated again at publish, so a test that passed before its table was deleted still blocks it. A node whose test came back with `needsRun: true` blocks publishing until a human runs that step in the editor. Enabling and run_as stay in the UI. Only publish when the user asked for it; say what will go live first.
Inputs
workflowIdstringrequired- Automation ID
cancelPendingExecutionsboolean- Runs still waiting against the previous version: true cancels them, false lets them finish on the old definition. Publishing is refused while any exist and this is unset, so the choice is the user's, not a default.
nocodbmcp_replacefiltersReplace the entire filter set of a view with the provided filter groupWriteReplace Filters
Replace the entire filter set of a view with the provided filter group
Inputs
filterstringrequired- Filter definition. A filter group has the shape { group_operator: "AND"|"OR", filters: [{ field_id, operator, value }, ...] } and groups may be nested inside `filters`.
viewIdstringrequired- View ID
nocodbmcp_resolvecommentResolve or reopen a comment.WriteResolve Comment
Resolve or reopen a comment. Setting the state it already has changes nothing.
Inputs
commentIdstringrequired- Comment ID
resolvedboolean- true resolves (default), false reopensdefault
true
nocodbmcp_restorefromtrashPut one trashed item back.WriteRestore From Trash
Put one trashed item back. Takes the trash entry `id` from listTrash â not the id of the table or record itself. Restoring records can collide with the table as it stands now â a unique value since taken, a linked row since gone. With neither flag set the call refuses and names the conflicts; `force` restores anyway and nulls the offending cells (lossy); `partial` restores the rows that are clean and leaves the rest in trash. The two are mutually exclusive, and both are ignored for anything that is not a record.
Inputs
trashIdstringrequired- Trash entry ID, as listTrash reports it
forceboolean- Restore through conflicts, nulling offending cells
partialboolean- Restore only the rows that have no conflict
nocodbmcp_restorerecordsPut deleted records back into a table by row id â the inverse of deleteRecords, for rows still inside the retention window.WriteRestore Records
Put deleted records back into a table by row id â the inverse of deleteRecords, for rows still inside the retention window. Only tables on a NocoDB-managed source keep deleted rows; an external source deletes for good and this refuses. Restoring records can collide with the table as it stands now â a unique value since taken, a linked row since gone. With neither flag set the call refuses and names the conflicts; `force` restores anyway and nulls the offending cells (lossy); `partial` restores the rows that are clean and leaves the rest in trash. The two are mutually exclusive, and both are ignored for anything that is not a record.
Inputs
rowIdsarrayrequired- Record IDs (primary key values) to restore
tableIdstringrequired- Table ID the records belong to
forceboolean- Restore through conflicts, nulling offending cells
partialboolean- Restore only the rows that have no conflict
nocodbmcp_setdatedependencyCreate or update a table's date dependency rule.WriteSet Date Dependency
Create or update a table's date dependency rule. Fields left out keep their current value on an existing rule. The fields are type-checked against the table: start and end must be Date or DateTime, duration must be Duration or Number, and the dependency field must be a link field. Passing `ganttViewId` writes that view's own rule instead of the table default, and needs the Gantt entitlement as well.
Inputs
tableIdstringrequired- Table ID
dependency_buffer_daysstring- Size of that gap, in days
dependency_buffer_typestring- Whether the gap between them can absorb a shift
dependency_connection_typestring- Which date of the predecessor drives which of the successor
dependency_linkrow_rolestring- What the linked records are to this one
fk_dependency_linkrow_field_idstring- Link field carrying the dependency chain
fk_duration_field_idstring- Duration or Number field holding the length
fk_end_date_field_idstring- Date or DateTime field holding the end
fk_start_date_field_idstring- Date or DateTime field holding the start
ganttViewIdstring- Write this Gantt view's own rule instead of the table default
include_weekendsboolean- Count Saturdays and Sundays when shifting dates
is_activeboolean- Whether the rule is enforced
nocodbmcp_setdisplayfieldMake a field the table's display value â the one shown when the row is referenced from a link, a picker or an expanded record.WriteSet Display Field
Make a field the table's display value â the one shown when the row is referenced from a link, a picker or an expanded record. Every table has exactly one, so this moves it rather than adding one. Only text, number, date/time, duration, autonumber and formula fields can take it â not LongText, selects, links or attachments.
Inputs
fieldIdstringrequired- Field/column ID to become the display value
nocodbmcp_submitfeedbackReport a NocoDB bug, missing capability, confusing behavior or docs gap to the NocoDB team.WriteSubmit Feedback
Report a NocoDB bug, missing capability, confusing behavior or docs gap to the NocoDB team. Call it when a tool errors unexpectedly, returns results that disagree with another tool, or cannot do what the user needs, or when the user asks to send feedback. No need to ask the user first: call once per issue, passing the requestId from the error as evidence, then tell the user what you reported. It changes no data and fixes nothing, so do not retry it. Describe problems in schema terms (tables, fields, tool names), never record values or personal data.
Inputs
intentstringrequired- What you or the user were trying to accomplish.
sourceobjectrequired- Who is reporting.
summarystringrequired- One line, at most 120 characters.
typestringrequired- bug: the call failed or errored wrongly. silent_bug: the call reported success but did the wrong thing. missing_capability, confusing_behavior, docs_gap: as named.one of
bugsilent_bugmissing_capabilityconfusing_behaviordocs_gap areastring- The tool section the issue falls under.one of
accountrecordsschemaviewsautomationinterfacesaccessplatformother baseIdstring- The base the issue happened in, if any.
detailsstring- What happened vs what you expected.
evidenceobject- The failed call. Required for agent_observed.
featurestring- The tool family, the category listTools groups the tool under (e.g. fields, filters); other if none fits.one of
recordstablesfieldsviewsfilterssortsshared-viewsform-fieldsview-sectionsbase-sectionsautomation-sectionsrow-colorsdashboardsinterfacesworkflowsworkflow-nodesscriptshooksrlspermissionsmembersauditsdocscommentsduplicatesdata-iorecord-templatesdate-dependencieslinksattachmentstrashworkspacesintegrationsenvironmentsagentsappsfeedbackroadmapother suggestionstring- A proposed fix or API shape.
userQuotestring- The userâs own words (user_request only).
workspaceIdstring- The workspace the issue happened in, if any.
nocodbmcp_unlinkrecordsRemove specific links from records in this table through a link field.WriteUnlink Records
Remove specific links from records in this table through a link field. Links not named are kept. A link the record does not have is named in `warnings`; other links still unlink. Reports per-record ok/error â one bad record does not fail the rest.
Inputs
fieldIdstringrequired- Link field ID or title, e.g. from getTableSchema
recordsarrayrequired- One entry per record on this table. At most 100 entries per call.
tableIdstringrequired- Table ID
nocodbmcp_updateautomationfolderRename an automation folder or change its order.WriteUpdate Automation Folder
Rename an automation folder or change its order.
Inputs
folderIdstringrequired- Automation folder ID
ordernumber- New order among the base sidebar
titlestring- New folder title
nocodbmcp_updatecommentUpdate an existing commentWriteUpdate Comment
Update an existing comment
Inputs
commentstringrequired- Updated comment text
commentIdstringrequired- Comment ID
nocodbmcp_updatedashboardUpdate an existing dashboardWriteUpdate Dashboard
Update an existing dashboard
Inputs
dashboardIdstringrequired- Dashboard ID
base_idstring- Read-only, returned by getDashboard. Send back what you read or omit it; a different value is refused.
created_atstring- Read-only, returned by getDashboard. Accepted so its output can be sent back, and ignored.
created_bystring- Read-only, returned by getDashboard. Accepted so its output can be sent back, and ignored.
descriptionstring- New description
idstring- Read-only, returned by getDashboard. Send back what you read or omit it; a different value is refused.
titlestring- New title
updated_atstring- Read-only, returned by getDashboard. Accepted so its output can be sent back, and ignored.
updated_bystring- Read-only, returned by getDashboard. Accepted so its output can be sent back, and ignored.
widgetsstring- Read-only, returned by getDashboard. Send back what you read or omit it; a different value is refused. Edit widgets one at a time with updateWidget.
workspace_idstring- Read-only, returned by getDashboard. Send back what you read or omit it; a different value is refused.
nocodbmcp_updatefieldUpdate an existing field (column).WriteUpdate Field
Update an existing field (column). When a conversion or a removed choice clears cell values, the response reports cleared_rows, cleared_by_choice and conversion counts. Pass dryRun: true first on a type change or a choice rewrite to see, without writing anything, how many values would be cleared (cleared_rows) or rounded/truncated (rounded_rows), with sample record ids; for a link â SingleLineText conversion it also lists the text written, the reverse link field that is deleted and the fields that break.
Inputs
fieldobjectrequired- Field properties to update (only the keys to change).
fieldIdstringrequired- Field/column ID
dryRunboolean- Report what the update would clear or round, and write nothing.
nocodbmcp_updatefilterUpdate a single filter on a viewWriteUpdate Filter
Update a single filter on a view
Inputs
filterstringrequired- Filter to update â must include its `id`
viewIdstringrequired- View ID
nocodbmcp_updatefolderUpdate an existing folder in the current base.WriteUpdate Folder
Update an existing folder in the current base.
Inputs
folderIdstringrequired- Folder ID
ordernumber- Position in the shared sidebar sequence folders and unfoldered tables, documents and dashboards share
titlestring- New title
nocodbmcp_updateinterfaceUpdate an interface title, description or visibilityWriteUpdate Interface
Update an interface title, description or visibility
Inputs
interfaceIdstringrequired- Interface ID
base_idstring- Read-only, returned by getInterface. Send back what you read or omit it; a different value is refused.
created_atstring- Read-only, returned by getInterface. Accepted so its output can be sent back, and ignored.
created_bystring- Read-only, returned by getInterface. Accepted so its output can be sent back, and ignored.
deletedstring- Read-only, returned by getInterface. Accepted so its output can be sent back, and ignored.
descriptionstring- New description
first_published_atstring- Read-only, returned by getInterface. Accepted so its output can be sent back, and ignored.
fk_workspace_idstring- Read-only, returned by getInterface. Send back what you read or omit it; a different value is refused.
hiddenboolean- Hide the interface from the navigation
idstring- Read-only, returned by getInterface. Send back what you read or omit it; a different value is refused.
last_published_atstring- Read-only, returned by getInterface. Accepted so its output can be sent back, and ignored.
metastring- Appearance meta â JSON object: { icon?, color?, theme?: { accent?, style? }, restrict_sharing? }.
orderstring- Read-only, returned by getInterface. Send back what you read or omit it; a different value is refused.
owned_bystring- Read-only, returned by getInterface. Send back what you read or omit it; a different value is refused.
titlestring- New title
updated_atstring- Read-only, returned by getInterface. Accepted so its output can be sent back, and ignored.
updated_bystring- Read-only, returned by getInterface. Accepted so its output can be sent back, and ignored.
nocodbmcp_updateinterfacepageUpdate an interface page.WriteUpdate Interface Page
Update an interface page. A `config` REPLACES the whole draft config â getInterfacePage first, mutate what it returns, then send it back. Writes only touch the draft; publishInterface makes it live. Unpublishing and sharing a page publicly are deliberately not exposed â a human does those in the UI. A page carries `password_protected` (boolean), not `password`.
Inputs
pageIdstringrequired- Interface page ID
base_idstring- Read-only, returned by getInterfacePage. Send back what you read or omit it; a different value is refused.
configobject- Layout-specific JSON config (draft). Its shape depends on the page layout and is keyed by column/view/page IDs. Do not guess its keys â call getInterfacePageConfigSchema(layout) for the exact JSON Schema this config is validated against, getInterfaceAuthoringInstructions for the authoring model, and getInterfacePageMeta to discover the column IDs of the source table.
created_atstring- Read-only, returned by getInterfacePage. Accepted so its output can be sent back, and ignored.
created_bystring- Read-only, returned by getInterfacePage. Accepted so its output can be sent back, and ignored.
deletedstring- Read-only, returned by getInterfacePage. Accepted so its output can be sent back, and ignored.
draft_modified_atstring- Read-only, returned by getInterfacePage. Accepted so its output can be sent back, and ignored.
errorstring- Read-only, returned by getInterfacePage. Accepted so its output can be sent back, and ignored.
fk_interface_idstring- Read-only, returned by getInterfacePage. Send back what you read or omit it; a different value is refused.
fk_model_idstring- Source table ID
fk_workspace_idstring- Read-only, returned by getInterfacePage. Send back what you read or omit it; a different value is refused.
idstring- Read-only, returned by getInterfacePage. Send back what you read or omit it; a different value is refused.
is_publishedstring- Read-only, returned by getInterfacePage. Send back what you read or omit it; a different value is refused. publishInterface makes the draft live.
keep_as_draftboolean- Exclude this page from the next publish
layoutstring- Read-only, returned by getInterfacePage. Send back what you read or omit it; a different value is refused. A page keeps its layout; create a new page instead.
metastring- Appearance meta â JSON object: { icon?, color?, theme?: { accent?, style? }, restrict_sharing? }.
orderstring- Read-only, returned by getInterfacePage. Send back what you read or omit it; a different value is refused.
password_protectedstring- Read-only, returned by getInterfacePage. Send back what you read or omit it; a different value is refused. Page passwords are set in the UI.
published_atstring- Read-only, returned by getInterfacePage. Accepted so its output can be sent back, and ignored.
published_configstring- Read-only, returned by getInterfacePage. Send back what you read or omit it; a different value is refused. Edit `config` (the draft) and publishInterface it.
show_in_navboolean- Show the page in the interface navigation
titlestring- New title
updated_atstring- Read-only, returned by getInterfacePage. Accepted so its output can be sent back, and ignored.
updated_bystring- Read-only, returned by getInterfacePage. Accepted so its output can be sent back, and ignored.
uuidstring- Read-only, returned by getInterfacePage. Accepted so its output can be sent back, and ignored.
visual_variantstring- Render variant: page, modal or sidesheetone of
pagemodalsidesheet
nocodbmcp_updaterecordsbyconditionSet the same field values on every record matching a condition â "set Status to Archived where Closed is before 2024".WriteUpdate Records By Condition
Set the same field values on every record matching a condition â "set Status to Archived where Closed is before 2024". One call instead of paging ids into updateRecords, and not capped at 100 records. The condition is required: there is no form of this tool that updates every record, and `fields` cannot set a primary key. It answers with a count and nothing else, so run queryRecords or aggregate with the same condition first when you need to know what it will touch.
Inputs
fieldsobjectrequired- The field values to set â the same for every match
tableIdstringrequired- Table ID
filterstring- Structured filter â the same shape as createFilter: a single condition { field, operator, value }, or a group { group_operator: "AND"|"OR", filters: [...] } whose members may themselves be groups. Field names and values are quoted for you, so commas, parentheses and quotes in either are safe. Prefer this over `where`; pass only one of the two.
wherestring- Filter records using NocoDB query syntax, e.g. (status,eq,active)~and(amount,gte,100). For the complete operator list, date sub-operators, quoting rules and examples, see the `where` parameter of the `queryRecords` tool â the syntax is identical.
nocodbmcp_updaterecordtemplateUpdate a record template.WriteUpdate Record Template
Update a record template. `template_data` is replaced whole, not merged â read the template first and send the full payload. `enabled: false` keeps the template but takes it out of the picker.
Inputs
templateIdstringrequired- Template ID â from listRecordTemplates
base_idstring- Read-only, returned by getRecordTemplate. Send back what you read or omit it; a different value is refused.
created_atstring- Read-only, returned by getRecordTemplate. Accepted so its output can be sent back, and ignored.
created_bystring- Read-only, returned by getRecordTemplate. Accepted so its output can be sent back, and ignored.
descriptionstring- New description
enabledboolean- Whether the template is offered in the record picker
fk_model_idstring- Read-only, returned by getRecordTemplate. Send back what you read or omit it; a different value is refused.
fk_workspace_idstring- Read-only, returned by getRecordTemplate. Send back what you read or omit it; a different value is refused.
idstring- Read-only, returned by getRecordTemplate. Send back what you read or omit it; a different value is refused.
template_dataobject- Replacement payload, whole
titlestring- New title, unique per table
updated_atstring- Read-only, returned by getRecordTemplate. Accepted so its output can be sent back, and ignored.
updated_bystring- Read-only, returned by getRecordTemplate. Accepted so its output can be sent back, and ignored.
usage_countstring- Read-only, returned by getRecordTemplate. Accepted so its output can be sent back, and ignored.
nocodbmcp_updatesortUpdate an existing sort on a viewWriteUpdate Sort
Update an existing sort on a view
Inputs
sortIdstringrequired- Sort ID
viewIdstringrequired- View ID
directionstring- Sort directionone of
ascdesc field_idstring- Field/column ID to sort by
order_bystring- SingleSelect only: 'option_order' sorts by the field's option order instead of alphabetically (default: alphabetical)one of
alphabeticaloption_order
nocodbmcp_updatetableUpdate an existing tableWriteUpdate Table
Update an existing table
Inputs
tableIdstringrequired- Table ID
descriptionstring- New table description
display_field_idstring- Field to use as the table display value (primary value). Must be a field of this table; Long Text fields are rejected.
metaobject- Table meta configuration
titlestring- New table title
nocodbmcp_updateviewUpdate an existing view.WriteUpdate View
Update an existing view. A gallery/kanban view answers with `options.cover_field_id`, the key these tools accept back.
Inputs
viewIdstringrequired- View ID
created_atstring- Read-only, returned by getView. Accepted so its output can be sent back, and ignored.
created_bystring- Read-only, returned by getView. Accepted so its output can be sent back, and ignored.
descriptionstring- Read-only, returned by getView. Send back what you read or omit it; a different value is refused.
fieldsarray- Complete ordered field list. Array order sets the field order; every field omitted is hidden. An empty array hides all but the display-value field. Read the current list from `getView`.
filtersstring- Read-only, returned by getView. Send back what you read or omit it; a different value is refused. Edit filters with createFilter/updateFilter/replaceFilters.
idstring- Read-only, returned by getView. Send back what you read or omit it; a different value is refused.
lock_typestring- View mode: collaborative (anyone with access may edit), personal (only the owner sees their config) or locked (config is read-only for editors and below; creators and owners can still change or delete it)one of
collaborativelockedpersonal locked_by_user_idstring- Read-only, returned by getView. Accepted so its output can be sent back, and ignored.
locked_view_descriptionstring- Read-only, returned by getView. Accepted so its output can be sent back, and ignored.
optionsobject- View-type-specific options to update
owned_bystring- Read-only, returned by getView. Accepted so its output can be sent back, and ignored.
row_coloringstring- Read-only, returned by getView. Send back what you read or omit it; a different value is refused. Edit row coloring with setRowColorBySelect or the *RowColorCondition tools.
sortsstring- Read-only, returned by getView. Send back what you read or omit it; a different value is refused. Edit sorts with addSort/updateSort/deleteSort.
table_idstring- Read-only, returned by getView. Send back what you read or omit it; a different value is refused.
titlestring- New view title
typestring- Read-only, returned by getView. Send back what you read or omit it; a different value is refused. A view keeps its type; create a new view instead.
updated_atstring- Read-only, returned by getView. Accepted so its output can be sent back, and ignored.
updated_bystring- Read-only, returned by getView. Accepted so its output can be sent back, and ignored.
nocodbmcp_updateviewfolderRename a view folder or change its order.WriteUpdate View Folder
Rename a view folder or change its order.
Inputs
folderIdstringrequired- View folder ID
ordernumber- New order within the tier
titlestring- New folder title
nocodbmcp_updatewidgetUpdate an existing widget.WriteUpdate Widget
Update an existing widget. `options` REPLACES the whole config â getWidget first, mutate what it returns, then send it back. It is validated against the widget's stored `type` on the same terms as createWidget, so an update that would leave the widget rendering nothing is refused. Leave `options` out to keep the stored config as it is: a widget the UI authored in a shape this API cannot create (a scatter/treemap chart, a `count_unique` metric) can still be retitled, repositioned or repointed at another table that way. `type` itself cannot be changed.
Inputs
widgetIdstringrequired- Widget ID
created_atstring- Read-only, returned by getWidget. Accepted so its output can be sent back, and ignored.
created_bystring- Read-only, returned by getWidget. Accepted so its output can be sent back, and ignored.
dashboard_idstring- Read-only, returned by getWidget. Send back what you read or omit it; a different value is refused.
descriptionstring- Widget description
errorstring- Read-only, returned by getWidget. Accepted so its output can be sent back, and ignored.
idstring- Read-only, returned by getWidget. Send back what you read or omit it; a different value is refused.
optionsobject- Replacement widget configuration â a partial config wipes the keys it omits. Same shape as createWidget, for this widget's stored type. Omit to leave the stored config untouched.
ordernumber- Widget order
positionobject- Position on the dashboard grid, which is 4 columns wide (NOT 12) â x + w must not exceed 4. Per-type resize bounds: metric: w 1-4, h 2-6; chart: w 2-2, h 5-6; text: w 2-4, h from 1; iframe: w 2-4, h 5-12. Omit to have the widget appended below the existing ones.
problemsstring- Read-only, returned by getWidget. Accepted so its output can be sent back, and ignored.
table_idstring- Source table ID
titlestring- Widget title
typestring- Read-only, returned by getWidget. Send back what you read or omit it; a different value is refused. A widget keeps its type; create a new one instead.
updated_atstring- Read-only, returned by getWidget. Accepted so its output can be sent back, and ignored.
updated_bystring- Read-only, returned by getWidget. Accepted so its output can be sent back, and ignored.
view_idstring- Source view ID
nocodbmcp_updateworkflowUpdate an automation's title, description or draft graph.WriteUpdate Workflow
Update an automation's title, description or draft graph. Writes replace the whole draft graph, so always getWorkflow first, mutate the graph it returns, then send it back â and note it is last-write-wins against anyone editing the same automation in the UI. Publishing clears `draft`, so read `draft` when it is set and fall back to `nodes`/`edges` otherwise. `data.testResult` is ignored on write; results are carried forward for every node you leave untouched. To edit one node instead of the whole graph, use addWorkflowNode / updateWorkflowNode / deleteWorkflowNode and connectWorkflowNodes / disconnectWorkflowNodes. Only the draft is writable. Testing one node is exposed (the `validate` flag, and validateWorkflowNode), and publishWorkflow puts the tested draft live. Enabling and run_as are deliberately not exposed â a human sets those in the UI.
Inputs
workflowIdstringrequired- Automation ID
base_idstring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused.
configstring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused.
created_atstring- Read-only, returned by getWorkflow. Accepted so its output can be sent back, and ignored.
created_bystring- Read-only, returned by getWorkflow. Accepted so its output can be sent back, and ignored.
deletedstring- Read-only, returned by getWorkflow. Accepted so its output can be sent back, and ignored.
descriptionstring- Automation description
draftstring- The whole draft graph, replacing whatever is stored. Writes replace the whole draft graph, so always getWorkflow first, mutate the graph it returns, then send it back â and note it is last-write-wins against anyone editing the same automation in the UI. Publishing clears `draft`, so read `draft` when it is set and fall back to `nodes`/`edges` otherwise. `data.testResult` is ignored on write; results are carried forward for every node you leave untouched. To edit one node instead of the whole graph, use addWorkflowNode / updateWorkflowNode / deleteWorkflowNode and connectWorkflowNodes / disconnectWorkflowNodes.
draft_reminder_sent_atstring- Read-only, returned by getWorkflow. Accepted so its output can be sent back, and ignored.
edgesstring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused. The published graph is read-only; send edits as `draft`.
enabledstring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused. A human enables an automation in the UI.
fk_automation_section_idstring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused. Use moveAutomationToFolder.
fk_workspace_idstring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused.
idstring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused.
metastring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused.
nodesstring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused. The published graph is read-only; send edits as `draft`.
orderstring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused.
scriptstring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused.
titlestring- Automation title
typestring- Read-only, returned by getWorkflow. Send back what you read or omit it; a different value is refused.
updated_atstring- Read-only, returned by getWorkflow. Accepted so its output can be sent back, and ignored.
updated_bystring- Read-only, returned by getWorkflow. Accepted so its output can be sent back, and ignored.
nocodbmcp_updateworkflownodeUpdate one node of an automation's draft.WriteUpdate Workflow Node
Update one node of an automation's draft. Edits one node of the draft in place, so you do not have to send the whole graph. The read-mutate-write is done server-side, which keeps the last-write-wins window against a human editing in the UI down to this one request. Use updateWorkflow instead for bulk authoring or fan-out/merge topologies. Changing `type` or `config` clears that node's test result and every result downstream of it, exactly as editing in the UI does.
Inputs
nodeIdstringrequired- Node id to update
workflowIdstringrequired- Automation ID
configobject- Config keys to change, MERGED into the stored config at the top level only. Keys you omit keep their stored value; pass null to clear one. A nested object (a field map such as nocodb.create_record's config.fields) is replaced whole, not merged, so send all of its keys.
descriptionstring- No description.
titlestring- New node title, unique within the graph. Renaming it breaks every expression that references the old title â update those too.
typestring- New node type id, as listWorkflowNodeTypes reports it
validateboolean- Test the node afterwards and store the result the way the UI does. The test is a check, not a run: the node does not perform its action â a create-record node writes no row, a messaging node posts nothing. It resolves the node's config against the upstream results and checks it with read-only calls (does the table have every field set, does a GET endpoint answer), and the result is marked `simulated: true`. A missing expression path is not caught â it resolves to empty, so read `input` in the result. A node that can only be checked by running it (a script, a node that declares no outputs) comes back failed with `needsRun: true` and a `nextStep`; it cannot be run over MCP. Static checks run either way. A node can only be tested once every node upstream of it has been tested, so work in order from the trigger. The edit itself is never rolled back by a test: if the test cannot run or fails, the edit stands and the reason comes back as `testError` instead of `testResult`.
nocodbmcp_uploadattachmentPut a file into an Attachment field.WriteUpload Attachment
Put a file into an Attachment field. Each file is given as a URL: an http(s) address the NocoDB server fetches itself, or a `data:` URL carrying the bytes inline, for small files only (at most 128 MB decoded, the same cap as a fetched file). A local file path is not supported, nor is any address the server cannot reach: localhost on your machine, an intranet, or a link that needs a login (private and internal addresses are refused). For such a file, ask the person to host it at a fetchable https URL (a pre-signed S3/GCS link works), or to attach it in the NocoDB UI. Name a record â `tableId` + `recordId` + `fieldId` together â and the uploaded files are appended to that cell, leaving what is already there. Name no record and the files are uploaded and returned, to pass into createRecords or updateRecords yourself; only the caller that uploaded a file may then write it into a cell. The reply always lists what was stored.
Inputs
filesarrayrequired- Files to upload, at most 10 per call
fieldIdstring- Attachment field to append to â its ID or its title
recordIdstring- Record ID to attach to
tableIdstring- Table ID of the record to attach to
nocodbmcp_upsertrecordsInsert records, updating the ones that already exist instead of duplicating them â matched on the fields named in fieldsToMergeOn rather than on record id, so an agent holding an external key does not have to query first.WriteUpsert Records
Insert records, updating the ones that already exist instead of duplicating them â matched on the fields named in fieldsToMergeOn rather than on record id, so an agent holding an external key does not have to query first. Each returned record carries `status: inserted | updated`. Up to 100 records and 3 merge fields per call; merge fields cannot be computed, link or attachment fields, and the record `fields` must not name a primary key. A link field in `fields` replaces the matched record's whole link set, as updateRecords does, so pass the complete list, or `[]` to clear it. Bare link values are matched as display values (titles), unlike createRecords / updateRecords, which read them as primary keys; pass `{ id }` to link by primary key. To add links without restating the set, use linkRecords.
Inputs
fieldsToMergeOnarrayrequired- Field titles (or ids) that identify an existing record â the business key. Every record must carry a value for each of them. Several fields match on all of them together.
recordsarrayrequired- Array of records with fields as key-value pairs. At most 100 per call â a longer array is rejected outright, so split larger writes into batches.
tableIdstringrequired- Table ID
nocodbmcp_validateworkflownodeTest one node of an automation and store the result, which is what the `validate` flag on the node-editing tools does, and what publish requires of every node.WriteValidate Workflow Node
Test one node of an automation and store the result, which is what the `validate` flag on the node-editing tools does, and what publish requires of every node. The test is a check, not a run: the node does not perform its action â a create-record node writes no row, a messaging node posts nothing. It resolves the node's config against the upstream results and checks it with read-only calls (does the table have every field set, does a GET endpoint answer), and the result is marked `simulated: true`. A missing expression path is not caught â it resolves to empty, so read `input` in the result. A node that can only be checked by running it (a script, a node that declares no outputs) comes back failed with `needsRun: true` and a `nextStep`; it cannot be run over MCP. Every node upstream must already have been tested, so work in order from the trigger. Triggers that wait on a real event (webhooks, external services) can only be tested in the UI. A fresh result marks every result downstream of this node stale.
Inputs
nodeIdstringrequired- Node id to test
workflowIdstringrequired- Automation ID
testTriggerDataobject- Sample trigger payload, for testing a trigger node that takes one. Ignored for other nodes, which read their input from the stored results of the nodes upstream.
nocodbmcp_deleteautomationfolderDelete an automation folder.DestructiveDelete Automation Folder
Delete an automation folder. The workflows and scripts inside are spread back across the gap it leaves and returned with their new orders (folders are interleaved with loose automations).
Inputs
folderIdstringrequired- Automation folder ID
nocodbmcp_deletecommentDelete a commentDestructiveDelete Comment
Delete a comment
Inputs
commentIdstringrequired- Comment ID
nocodbmcp_deletedashboardDelete a dashboardDestructiveDelete Dashboard
Delete a dashboard
Inputs
dashboardIdstringrequired- Dashboard ID
nocodbmcp_deletedatedependencyDelete a table's date dependency rule, or one Gantt view's.DestructiveDelete Date Dependency
Delete a table's date dependency rule, or one Gantt view's. Dates already stored on records are left as they are â only the rule that moves them goes.
Inputs
tableIdstringrequired- Table ID
ganttViewIdstring- Delete this Gantt view's rule instead of the table default
nocodbmcp_deletefieldDelete a field (column) from a table.DestructiveDelete Field
Delete a field (column) from a table. It goes to the trash with its cell values and can be restored with restoreFromTrash. Deleting a link field does not remove the reverse link on the related table: that field is replaced by a SingleLineText field with the same title (new field id) holding the linked display values. Re-read the related table schema to find it. restoreFromTrash restores the reverse link (original field id) and removes the placeholder.
Inputs
fieldIdstringrequired- Field/column ID
nocodbmcp_deletefilterDelete a filter from a viewDestructiveDelete Filter
Delete a filter from a view
Inputs
filterIdstringrequired- Filter ID
viewIdstringrequired- View ID
nocodbmcp_deletefolderDelete a folder.DestructiveDelete Folder
Delete a folder. Returns the tables, documents and dashboards freed by the delete with their new orders.
Inputs
folderIdstringrequired- Folder ID
nocodbmcp_deleteinterfaceDelete an interfaceDestructiveDelete Interface
Delete an interface
Inputs
interfaceIdstringrequired- Interface ID
nocodbmcp_deleteinterfacepageDelete a page from an interface (an interface must keep at least one page)DestructiveDelete Interface Page
Delete a page from an interface (an interface must keep at least one page)
Inputs
pageIdstringrequired- Interface page ID
nocodbmcp_deleterecordsDelete records in a tableDestructiveDeleteRecords
Delete records in a table
Inputs
recordsarrayrequired- Array of records with IDs to delete. At most 100 per call â a longer array is rejected outright, so split larger writes into batches.
tableIdstringrequired- Table ID
nocodbmcp_deleterecordtemplateDelete a record template.DestructiveDelete Record Template
Delete a record template. Records already created from it are untouched.
Inputs
templateIdstringrequired- Template ID â from listRecordTemplates
nocodbmcp_deletesortDelete a sort from a viewDestructiveDelete Sort
Delete a sort from a view
Inputs
sortIdstringrequired- Sort ID
viewIdstringrequired- View ID
nocodbmcp_deletetableDelete a table from a baseDestructiveDelete Table
Delete a table from a base
Inputs
tableIdstringrequired- Table ID
nocodbmcp_deleteviewDelete a view from a table.DestructiveDelete View
Delete a view from a table. The first collaborative view is the table's default, and the next one takes its place. The last collaborative grid view cannot be deleted.
Inputs
viewIdstringrequired- View ID
nocodbmcp_deleteviewfolderDelete a view folder.DestructiveDelete View Folder
Delete a view folder. Views inside are moved back to the top level; their orders are left unchanged (folders are a tier above the loose views).
Inputs
folderIdstringrequired- View folder ID
nocodbmcp_deletewidgetDelete a widget from a dashboardDestructiveDelete Widget
Delete a widget from a dashboard
Inputs
widgetIdstringrequired- Widget ID
nocodbmcp_deleteworkflowDelete an automationDestructiveDelete Workflow
Delete an automation
Inputs
workflowIdstringrequired- Automation ID
nocodbmcp_deleteworkflownodeDelete one node from an automation's draft.DestructiveDelete Workflow Node
Delete one node from an automation's draft. Edits one node of the draft in place, so you do not have to send the whole graph. The read-mutate-write is done server-side, which keeps the last-write-wins window against a human editing in the UI down to this one request. Use updateWorkflow instead for bulk authoring or fan-out/merge topologies. Every edge into or out of the node goes with it â an edge pointing at a missing node is rejected â so the chain is left open and you re-wire it with connectWorkflowNodes. Test results downstream of the deleted node are cleared, since their input is gone.
Inputs
nodeIdstringrequired- Node id to delete
workflowIdstringrequired- Automation ID
nocodbmcp_removefieldoptionsRemove select options (choices) from a single/multi select field.DestructiveRemove Field Options
Remove select options (choices) from a single/multi select field. Pass dryRun: true to see how many cell values the removal would clear (cleared_rows, cleared_by_choice, sample record ids) without removing anything.
Inputs
choicesarrayrequired- Choices to remove (by title)
fieldIdstringrequired- Field/column ID
dryRunboolean- Report the cell values the removal would clear, and write nothing.
nocodbmcp_updaterecordsUpdate records in a tableDestructiveUpdateRecords
Update records in a table
Inputs
recordsarrayrequired- Array of records with ID and fields to update. At most 100 per call â a longer array is rejected outright, so split larger writes into batches.
tableIdstringrequired- Table ID
returnFieldsstring- Fields to return for each record â an array of field names or ids, or a comma-separated list. Omit to get every field; pass only what you need to keep large writes readable.
No tools match.