← Back to all apps

Airtable

Databy Airtable
Launched Sep 14, 2026 on ChatGPTLaunched Feb 26, 2026 on Claude

Bring operational data and context into the flow of your Claude conversations. You can ask questions, create and update records, and analyze your data—all through conversation. Use the data in Airtable as input to the work you're doing in Claude, like building a landing page using content you've organized in Airtable. Make quick updates to Airtable without leaving the chat. Airtable for Claude is ideal anytime you need quick access to structured internal data to inform your conversation.

47ChatGPT Tools
12Claude Tools
AirtableDeveloper
DataCategory

Use Cases

data

Available Tools

Analyze Table

analyze_table
Full Description

Run statistical operations (count, sum, average, min, max, etc.) on an Airtable table, optionally grouped by columns and filtered.

Parameters (3 required, 4 optional)
Required
baseIdstring

The ID of the base containing the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

operationstring

The aggregation operation to perform. Do not provide a numericField for "count" operations.

Options:sumavgmediancountminmaxstdevvariancedistinct
tableIdstring

The ID of the table to analyze. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool.

Optional
filterOperatorstring

The logical top-level operator for combining multiple filters. Defaults to "and".

Options:andor
filtersarray

Filters to apply to the table. Only rows matching the filters are included in the analysis.

groupByFieldsarray

Fields to group by before performing the operation. The operation runs independently on each group.

numericFieldobject

The field to aggregate. Required for operations other than "count".

Create an automation

create_automation
Full Description

Creates and validates one automation in a base: a trigger plus ordered nodes — action nodes, repeatingGroup (run inner nodes once per item), and conditionalGroup (if/else-if/else branches). Many trigger and action types are supported; get_create_automation_instructions has the full catalog. Saves the draft configuration only — it is off until the user reviews and turns it on in the Airtable UI. Prefer get_create_automation_instructions once per session for the full catalog. Before building IDs, call list_tables_for_base(baseId). Call get_table_schema(baseId, tables) before filtering on select / multiSelect fields. Every trigger and node input is an expression (literal, $ref, template, fn, or a plain object/array) — not raw JSON. Field shapes, typed {obj}/{tuple} wrappers, write modes, and an error index are in get_create_automation_instructions.

Flow: 1. create_automation(baseId, name, trigger, nodes). If isValid is false, nothing was saved: use errors to fix the inputs and call again. After a couple of failed attempts, report the errors to the user instead of looping. 2. On success only the draft configuration is saved; the automation is off. Tell the user to open the automationUrl in the Airtable UI to review and turn it on. {"trigger":{"type":"recordCreated","inputs":{"tableId":"tbl..."}},"nodes":[{"key":"node1","type":"updateRecord","inputs":{"tableId":"tbl...","rowId":{"template":[{"$ref":"trigger","path":["id"]}]},"updateRecordMethod":"customFields","fields":{"fldStatus":{"template":["In Progress"]}}}}]}

Parameters (4 required, 1 optional)
Required
baseIdstring

The ID of the base to create the automation in. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

namestring

Name for the automation.

nodesarray

Ordered array of nodes (actions, repeatingGroup, or conditionalGroup). Groups (conditionalGroup/repeatingGroup) may be nested at most 2 levels deep. See create_automation description for semantics and the expression language.

triggerobject

Trigger configuration.

Optional
descriptionstring

Optional description for the automation.

Creates a new Airtable base

create_base
Full Description

Creates a new Airtable base with the specified tables and fields. Requires a workspaceId. To find workspace IDs, use list_workspaces. When tables are provided, the first field in each table's fields array becomes that table's primary field and must be a supported primary field type. Example: create a base called "Project Tracker" with a "Tasks" table: {"workspaceId": "wspZfrNIUEip5MazD", "name": "Project Tracker", "tables": [{"name": "Tasks", "fields": [{"name": "Task Name", "type": "singleLineText"}, {"name": "Status", "type": "singleSelect", "options": {"choices": [{"name": "Todo"}, {"name": "In progress"}, {"name": "Done"}]}}, {"name": "Priority", "type": "number", "options": {"precision": 0}}]}]}

Parameters (2 required, 1 optional)
Required
namestring

The name for the new base.

workspaceIdstring

The ID of the workspace to create the base in. Must start with "wsp" and is 17 characters long. Example: "wspZfrNIUEip5MazD". Do not substitute user-facing names for workspaceId. To get workspaceId, use the list_workspaces tool.

Optional
tablesarray

Optional. The tables to create in the new base. If omitted, a default table ("Table 1") with a "Name" singleLineText field is created.

Creates a new field in an Airtable table

create_field
Full Description

Creates a new field in an existing Airtable table. To get baseId and tableId, use the search_bases and list_tables_for_base tools first. Example: create a singleSelect "Status" field: {"baseId": "appZfrNIUEip5MazD", "tableId": "tblGlReoTNWfYnXIG", "field": {"name": "Status", "type": "singleSelect", "options": {"choices": [{"name": "Todo"}, {"name": "In progress"}, {"name": "Done"}]}}} Example: create a number "Priority" field: {"baseId": "appZfrNIUEip5MazD", "tableId": "tblGlReoTNWfYnXIG", "field": {"name": "Priority", "type": "number", "options": {"precision": 0}}} Example: create a formula field (reference other fields by name or ID): {"baseId": "appZfrNIUEip5MazD", "tableId": "tblGlReoTNWfYnXIG", "field": {"name": "Total", "type": "formula", "options": {"formula": "{Quantity} * {Price}"}}}

Parameters (3 required)
Required
baseIdstring

The ID of the base containing the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

fieldobject
tableIdstring

The ID of the table to create the field in. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool.

Create an interface

create_interface
Full Description

Creates a new interface within a base. Use list_bases or search_bases to find the appropriate baseId. If requested to do so, use create_page to create a new page within the interface. Use publish_interface to publish the pages in the interface to their live versions.

Parameters (2 required)
Required
baseIdstring

The ID of the base in which to create the interface. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

namestring

The display name for the new interface.

Create an interface page

create_page
Full Description

Creates a new page. Most page types live within an existing interface (pass interfaceId). Supported page types: visualization, dashboard, and recordDetail. Supported visualization types for "visualization" pages: kanban, list, calendar, gallery, grid, timeline, and recordReview. Use list_bases or search_bases to find the appropriate baseId. Use create_interface to create a new interface to house the page. Use list_pages_for_base to find the interfaceId if needed. Use describe_page_type to discover the config shape for the chosen pageType, and describe_page_element for element-specific config. The publish_interface tool can be used to publish the new page to the live version of the interface.

Parameters (4 required, 1 optional)
Required
baseIdstring

The ID of the base in which to create the page. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

namestring

The display name for the new page. For a "recordDetail" page, unless the user requested a different name, use "<Row unit> Detail" (for example, "Person Detail"). If that name is already used by a record detail page for the same table, append the next available number (for example, "Person Detail 2").

pageConfigurationobject

Page type-specific configuration. Schema is provided by describe_page_type and describe_page_element.

pageTypestring

The type of page to create.

Options:visualizationdashboardrecordDetail
Optional
interfaceIdstring

The ID of the interface in which to create the page. Required for every page type except "recordDetail" pages, which are standalone and must omit it. Must start with "pbd" and is 17 characters long.

Create a comment on an Airtable record

create_record_comment
Full Description

Creates a comment on a specific Airtable record. Do not assume baseId, tableId, or recordId. Obtain these from search_bases → list_tables_for_base → list_records_for_table. To mention a user or group in the comment, include @[userId] or @[userGroupId] tokens in the text. Obtain user IDs from collaborator fields in list_records_for_table results. Supports threaded replies via the optional parentCommentId parameter.

Parameters (4 required, 1 optional)
Required
baseIdstring

The ID of the base. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

recordIdstring

The ID of the record. Must start with "rec" and is 17 characters long. Example: "recZOTa3BDHxlJNzf". Do not substitute user-facing names for IDs To get recordId, use the list_records_for_table tool or display_records_for_table tools.

tableIdstring

The ID of the table. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool.

textstring

The text of the comment to create. To mention a user or group, include @[userId] or @[userGroupId] tokens in the text.

Optional
parentCommentIdstring

The ID of the parent comment to reply to, for creating a threaded reply. Obtain comment IDs from list_record_comments.

Creates new records in an Airtable table

create_records_for_table
Full Description

Creates new records in an Airtable table. To get baseId and tableId, use the search_bases and list_tables_for_base tools first. When writing to a linked-record (multipleRecordLinks) field through an interface page, get the record IDs from search_candidate_linked_records, passing a pageId that exposes the field for editing — it also applies the field's record-selection filters. It only works within interfaces; for base-level writes, use record IDs from the linked table. For singleSelect/multipleSelects fields, provide the option name as a plain string (e.g., "In progress") or array of strings, not the object format returned by list_records_for_table. By default the response includes only the fields you wrote. To also include fields you did not write (e.g. the primary field or formula results), pass their IDs in fieldIds. You can create up to 50 records per request. To create more than 50 records, make multiple requests. Example: create a record with singleLineText, number, singleSelect, and multipleSelects fields: {"baseId": "appZfrNIUEip5MazD", "tableId": "tblGlReoTNWfYnXIG", "records": [{"fields": {"fldGlRtkBNWfYnPOV": "Launch meeting", "fldulcCPDVz87Bmnw": 42, "fld8WsrpLHHevsnW8": "In progress", "fldgD18XtsueoiguT": ["Urgent", "Q1"]}}]}

Parameters (3 required, 3 optional)
Required
baseIdstring

The ID of the base containing the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

recordsarray

An array of record objects to create. Each record must have a "fields" property containing the field values.

tableIdstring

The ID of the table to create a record in. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool.

Optional
fieldIdsarray

The IDs of the fields to include in each returned record. If omitted, only the fields you wrote (the keys of records[].fields, unioned across all input records) are returned. Pass explicit IDs to include fields you did not write (e.g. the primary field or formula/rollup results). Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

interfaceContextobject

Set this only when the user lacks base access (which can be determined by the permission listed on list_bases) and is creating records through an interface they collaborate on. When provided, the creation is authorized against the user's collaborator permissions on the given interface instead of base-level permissions.

typecastboolean

Whether or not to perform best-effort automatic data conversion from string values. Defaults to false to preserve data integrity.

Creates a new table in an Airtable base

create_table
Full Description

Creates a new table in an Airtable base. To get baseId, use the search_bases or list_bases tools first. The first field in the fields array becomes the primary field of the table. Example: create a table called "Projects" with singleLineText (Title), number (Priority), singleSelect (Status), and multipleSelects (Tags) fields: {"baseId": "appZfrNIUEip5MazD", "name": "Projects", "fields": [{"name": "Title", "type": "singleLineText"}, {"name": "Priority", "type": "number", "options": {"precision": 0}}, {"name": "Status", "type": "singleSelect", "options": {"choices": [{"name": "Todo"}, {"name": "In progress"}, {"name": "Done"}]}}, {"name": "Tags", "type": "multipleSelects", "options": {"choices": [{"name": "Urgent"}, {"name": "Q1"}]}}]}

Parameters (3 required, 1 optional)
Required
baseIdstring

The ID of the base to create the table in. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

fieldsarray

The first field becomes the primary field and must be one of these types: "singleLineText", "email", "url", "multilineText", "number", "percent", "currency", "duration", "date", "dateTime", "phoneNumber", "barcode", "autoNumber". Remaining fields can be any type.

namestring

Must be unique within the base (case-insensitive).

Optional
descriptionstring

Delete an automation

delete_automation
Full Description

Deletes an existing automation from a base. The automation must be off before it can be deleted. The target automation must be off. If it is on, the user must turn it off in the Airtable UI before it can be deleted.

Parameters (2 required)
Required
automationIdstring

The ID of the automation to delete. Must start with "wfl" and is 17 characters long. Example: "wflGlRtkBNWfYnPOV". To get an automationId, use the create_automation tool.

baseIdstring

The ID of the base containing the automation. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

Delete an interface

delete_interface
Full Description

Deletes an interface from a base, including all of its pages. The published version, if any, immediately stops being available to end users. Use list_pages_for_base to find the appropriate interfaceId. To delete a single page within an interface instead, use delete_page.

On success of delete_interface, the response includes an actionId that can be passed to revert_action to undo the deletion, restoring the interface with its pages.

Parameters (2 required)
Required
baseIdstring

The ID of the base containing the interface to delete. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

interfaceIdstring

The ID of the interface to delete. Must start with "pbd" and is 17 characters long.

Delete an interface page

delete_page
Full Description

Deletes a page from an interface, given its pageId. Standalone forms, and pages that have no published version yet, are removed immediately. A page that has its own published version is instead staged for removal in the working draft, staying visible to end users until the interface is published. An immediate removal cannot be undone with these tools; a staged removal becomes permanent once the interface is published. Use list_pages_for_base to find the pageId if needed. After deleting, only offer to run publish_interface when the removal was staged — i.e. the page had its own published version. If it was removed immediately (a standalone form, or a page with no published version), the deletion already took effect for end users, so do not suggest publishing.

Parameters (2 required)
Required
baseIdstring

The ID of the base containing the page to delete. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

pageIdstring

The ID of the page to delete. Must start with "pag" and is 17 characters long. Example: "pagXxYyZzAaBbCcDd".

Deletes records from an Airtable table

delete_records_for_table
Full Description

Deletes records from an Airtable table. To get record IDs, use the list_records_for_table or search_records tools first. You can delete up to 50 records per request. To delete more than 50 records, make multiple requests. Example: delete selected records returned by a preceding list or search call, using the request shape advertised for this endpoint.

Parameters (3 required, 1 optional)
Required
baseIdstring

The ID of the base containing the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

recordIdsarray

An array of record IDs to delete. Must start with "rec" and is 17 characters long. Example: "recZOTa3BDHxlJNzf". Do not substitute user-facing names for IDs To get recordId, use the list_records_for_table tool or display_records_for_table tools.

tableIdstring

The ID of the table to delete records from. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool.

Optional
interfaceContextobject

Set this only when the user lacks base access (which can be determined by the permission listed on list_bases) and is deleting records through an interface they collaborate on. When provided, the deletion is authorized against the user's collaborator permissions on the given interface instead of base-level permissions.

Delete a table from an Airtable base

delete_table
Full Description

Deletes an entire table from a base, including all of its records, fields, and views. Use list_tables_for_base to find the appropriate tableId. A base must always have at least one table, so the last remaining table in a base cannot be deleted; attempting to do so returns an error.

On success, the response includes an actionId that can be passed to revert_action to undo the deletion, restoring the table with its records, fields, and views. Reverting is best-effort: it may fail if the base's schema changed after the deletion (for example, another table took the deleted table's former position), so treat the deletion as permanent unless a revert succeeds. Example: delete the table tblABCDEFGHIJKLMN in base appZfrNIUEip5MazD: {"baseId": "appZfrNIUEip5MazD", "tableId": "tblABCDEFGHIJKLMN"}

Parameters (2 required)
Required
baseIdstring

The ID of the base containing the table to delete. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

tableIdstring

The ID of the table to delete. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool.

Get the required configuration for a page element type

describe_page_element
Full Description

Returns the JSON schema for a page element of the specified type. The returned schema describes the element config within the pageConfiguration required by create_page.

Parameters (1 required)
Required
elementTypestring

The page element type to get the config schema for.

Options:kanbanlistcalendargallerygridtimelinerecordReviewnumberbarChartlineChartscatterChartpieChartdonutChartpivotTable

Get the required configuration for a page type

describe_page_type
Full Description

Returns the JSON schema for a page type config. Use describe_page_element to discover any element-specific config required for the chosen page type. The returned schema describes the pageConfiguration shape required by create_page.

Parameters (1 required)
Required
pageTypestring

The page type to get the config schema for.

Options:visualizationdashboardrecordDetail

Display Airtable records in an interactive view

display_records_for_table
Full Description

Displays an interactive widget showing record data queried from an Airtable table. Do not assume baseId and tableId. Obtain these from search_bases → list_tables_for_base. Do not attempt to pass filterByFormula. Look carefully at the filters parameter. Pre-requisite: If filtering on singleSelect/multipleSelects fields, you must call get_table_schema first to get the choice IDs. Aim to provide 6 to 10 relevant fields via the 'fieldIds' parameter. The possible view types are kanban and list. Set viewType to kanban when there is a singleSelect field that is requested. Aim to provide at least 1 sort when there is a reasonable column to sort by. Note: singleSelect and multipleSelects field values are returned as objects (e.g., {"id": "sel...", "name": "Option", "color": "blue"}) or arrays of such objects. When writing these values back via create_records_for_table or update_records_for_table, use the plain string name (e.g., "Option") instead of the object.

Parameters (3 required, 8 optional)
Required
baseIdstring

The ID of the base containing the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

fieldIdsarray

Only data for fields whose IDs are in this list will be included in the result. Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

tableIdstring

The table to list records from. Accepts either a table ID (e.g., "tblGlReoTNWfYnXIG") or a table name (e.g., "Orders"). Names are resolved case-insensitively within the base. To discover tables, use the list_tables_for_base tool.

Optional
coverImageFieldIdstring

The ID of the field to use as the cover image. Only used when viewType is kanban. This field must be an attachment field. Prefer fields that seem to contain images rather than documents or other file types. If no logical attachment field exists, then do not set this parameter. Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

cursorstring

The cursor to start from. To begin from the first record, do not include a cursor. For a subsequent paginated request, include the nextCursor from the previous response.

filtersobject

Describes the filters to apply to the records using a structured format. Example filter where the value of the field with ID "fld8WsrpLHHevsnW8" is "orange" or the value of the field with ID "fldulcCPDVz87Bmnw" is greater than 5: {"operator": "or", "operands": [{"operator": "=", "operands": ["fld8WsrpLHHevsnW8", "orange"]}, {"operator": ">", "operands": ["fldulcCPDVz87Bmnw", 5]}]} Example filter where the value of the collaborator field with ID "fldCRi9oz2vRLcIWr" can be any user in a group with ID "ugpDUVUnftA7H9bG8" and the value of the field with ID "fldgD18XtsueoiguT" equals select option with ID "selha8nGNAT5ATR7P": {"operator": "and", "operands": [{"operator": "hasAnyOf", "operands": ["fldCRi9oz2vRLcIWr", "ugpDUVUnftA7H9bG8"], "operatorOptions": {"matchGroupsByMembership": true}}, {"operator": "=", "operands": ["fldgD18XtsueoiguT", "selha8nGNAT5ATR7P"]}]} Example filter for records where a date field is within the past week: {"operands": [{"operator": "isWithin", "operands": ["fldABC12345678x", {"mode": "pastWeek", "timeZone": "America/New_York"}]}]} Example filter for records where a field is not empty: {"operands": [{"operator": "isNotEmpty", "operands": ["fldABC12345678x"]}]}

pageSizeinteger

The maximum number of records to return in the response. The server may respond with fewer records than this value when the total set has fewer records than this value.

recordIdsarray

An array of record IDs to filter by. Only records with these IDs will be returned. Must start with "rec" and is 17 characters long. Example: "recZOTa3BDHxlJNzf". Do not substitute user-facing names for IDs To get recordId, use the list_records_for_table tool or display_records_for_table tools.

sortarray

A list of sort objects that specifies how the records will be ordered. Each sort object must have a fieldId key specifying the field to sort on (ID or name), and an optional direction key that is either "asc" or "desc". The default direction is "asc". Records are sorted by the first sort object first, then by the second sort object for records that have the same value for the first sort, and so on. Example sort by a single field in descending order: [{"fieldId": "Status", "direction": "desc"}] Example sort by two fields, first ascending then descending: [{"fieldId": "Priority", "direction": "asc"}, {"fieldId": "Created", "direction": "desc"}]

stackingFieldIdstring

The ID of the field to stack the data by. Only used when viewType is kanban. This field must be a single select field. If no logical single select field exists, then do not set this parameter. Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

viewTypestring

Type of view to display the data in. Potential values in order of preference: - kanban: displays the data in a visual kanban board, e.g. when asked to show the status of tasks. - list: displays the data in a basic list.

Options:kanbanlist

Fetch input options for an automation action or trigger

fetch_automation_input_data
Full Description

Fetches dynamic input options for an automation action or trigger's input field (e.g. Slack channels, Jira projects, calendars). Requires an externalAccountId from list_external_accounts. Use get_create_automation_instructions to discover which inputKey values each action or trigger type expects.

Parameters (3 required, 4 optional)
Required
externalAccountIdstring

Must start with "eac" and is 17 characters long. Example: "eacZfrNIUEip5MazD". To get externalAccountId, use the list_external_accounts tool.

inputKeystring

The input field to fetch options for (e.g., "slackConversationId", "msTeamsTeamId").

workflowNodeTypeIdstring

The action or trigger type ID. Use the camelCase type value (e.g., "sendToSlack", "atlassianJiraCreateIssue", "googleCalendarEventCreated").

Optional
dependentInputobject

Values of prerequisite inputs this field depends on. For example, to fetch MS Teams channels, pass {"msTeamsTeamId": "<team-id>"}.

pagingCountnumber

Number of results to return. Default 10.

pagingStartIndexnumber

Start index for pagination. Default 0.

searchQuerystring

Filter results by name.

Get automation configuration

get_automation
Full Description

Gets the full configuration of a single automation in an Airtable base, including trigger configuration, action nodes with their input expressions, and deployment status. The returned configuration is the draft (the working copy the user edits). Set includeDeployedVersion to true to also see the most recently published configuration when it differs from the draft — useful for debugging deployed behavior. Edits always apply to the draft. Requires an automationId, which can be obtained from list_automations. {"baseId": "appZfrNIUEip5MazD", "automationId": "wflGlRtkBNWfYnPOV"}

Parameters (2 required, 1 optional)
Required
automationIdstring

The ID of the automation to retrieve. Must start with "wfl" and is 17 characters long. Example: "wflGlRtkBNWfYnPOV". To get an automationId, use the create_automation tool.

baseIdstring

The ID of the base containing the automation. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

Optional
includeDeployedVersionboolean

When true, each returned automation includes a `deployedVersion` field showing the most recently published configuration when it differs from the draft.

Get create automation instructions

get_create_automation_instructions
Full Description

Returns the full spec for create_automation — expression language, wrappers, function catalog, trigger and action input catalogs, pitfalls, and a complete example. Call once per session before building an automation payload.

Parameters (0 required, 1 optional)
Optional
baseIdstring

The ID of the base you plan to create automations in. Providing this includes features that may be available for this base but not globally. If omitted, only globally available features are returned.

Get the schema of a form page

get_form_schema
Full Description

Returns the schema of a form page — its structure, not the submitted-record data.

Returns the form's source table, submission action (create or update), and a hierarchical breakdown of sections, rows, and field elements. Sections are the visual groups inside the form (each with an optional title), rows are the columns-of-fields layout within a section, and elements describe each individual field — its label, helper text, field type, required/read-only status, any prefilled value, and any conditional visibility filter. Single-select and multi-select field elements also list their valid choices.

Use this when the user asks how a form is organized, what fields it collects, or which fields are required. visibilityFilters specifies the conditions under which a field or section is shown, not a resolved shown/hidden state. Required fields are required only when visible. Fields inside hidden sections are not visible. Do not call this on non-form pages.

Supports entry-level form pages (in an interface or standalone) and record-creation row forms, forms embedded in other interface page types. Do not assume baseId. Obtain it from search_bases or list_bases. Use list_pages_for_base to find the pageId if needed. Record-creation row forms appear in that tool's embeddedForms array; pass any one of the form's interfaceIds as the interfaceId here. {"baseId": "appZfrNIUEip5MazD", "pageId": "pagXxYyZzAaBbCcDd"}

Parameters (2 required, 1 optional)
Required
baseIdstring

The ID of the base containing the form page. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

pageIdstring

The ID of the form page whose schema you want to read. Must start with "pag" and is 17 characters long. Example: "pagXxYyZzAaBbCcDd".

Optional
interfaceIdstring

The ID of the interface containing the form page, if the form is in an interface. Must start with "pbd" and is 17 characters long.

Get a record from an interface page

get_record_for_page
Full Description

Gets a single record's details from an interface page element. Takes a navigation path with a root record and edges representing linked record relationships. With no edges, returns the root record. With edges, returns the last edge's linkedRecordId. For each edge, fieldId is the linked record field to follow, and linkedRecordId is the record it points to.

Example: record A on page P has linked record field F pointing to record B.

  • Fetch A: path = {root: {pageId: P, recordId: A}, edges: []}
  • Fetch B: path = {root: {pageId: P, recordId: A}, edges: [{fieldId: F, linkedRecordId: B}]}

Each subsequent call appends to the same path without changing root.

For dashboard pages, include elementId in the root to identify the dashboard element. Obtain element IDs from the dashboardElements array in the list_pages_for_base response.

The response includes navigationTargets listing which fieldIds can be expanded further. To navigate deeper, append a new edge.

Requires baseId and path. Use this for bases with permissionLevel "interfaceOnly" or "none" (interface-only access), or when the user asks about interface/page data. Do not assume baseId. Obtain it from search_bases or list_bases. Use list_pages_for_base to find the pageId or interfaceId if needed.

Parameters (3 required, 1 optional)
Required
baseIdstring

The ID of the base (application) containing the page. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

interfaceIdstring

The ID of the interface that contains the page. Must start with "pbd" and is 17 characters long.

pathobject

The navigation path from the page where the record was listed. Construct the root from the same pageId used in list_records_for_page.

Optional
fieldIdsarray

Only data for fields whose IDs are in this list will be included in the result. If not provided, all fields visible on the page will be returned. Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

Get Table Schema

get_table_schema
Full Description

Gets the detailed schema information for specified tables and fields in a base. This returns the field ID, type, and config for the specified fields of the specified tables. Example: get schema for two fields in a table: {"baseId": "appZfrNIUEip5MazD", "tables": [{"tableId": "tblGlReoTNWfYnXIG", "fieldIds": ["fld8WsrpLHHevsnW8", "fldgD18XtsueoiguT"]}]}

Parameters (2 required)
Required
baseIdstring

The ID of the base containing the tables. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

tablesarray

An array of table IDs, each optionally narrowed to specific field IDs. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool. Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

List automation runs

list_automation_runs
Full Description

Lists past runs of a published automation, newest first, with the failing step and error category for any run that failed. This is the tool for any question about whether an automation is working: why it failed, whether it is still failing, when it started failing, or how often.

Cross-reference failure.nodeKey with the node keys from get_automation to see the configuration of the step that broke. Run history does not go back indefinitely. The oldest run returned is not necessarily the first one. Do not assume baseId or automationId. Obtain the base from search_bases or list_bases, and the automation from list_automations. {"baseId": "appZfrNIUEip5MazD", "automationId": "wflGlRtkBNWfYnPOV", "status": "failure"}

Parameters (2 required, 4 optional)
Required
automationIdstring

The ID of the automation whose runs to list. Must start with "wfl" and is 17 characters long. Example: "wflGlRtkBNWfYnPOV". To get an automationId, use the create_automation tool.

baseIdstring

The ID of the base containing the automation. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

Optional
cursorstring

Pass nextCursor from a previous response to fetch the following page. Must start with "wfx" and is 17 characters long. Example: "wfxR9dBiKHQokh1Jt".

pageSizeinteger

Number of runs to return. Defaults to 20, maximum 100.

startedBeforestring

Returns runs queued before this time. Must be an ISO 8601 datetime with either Z or an explicit timezone offset.

statusstring

Return only runs with this status. Use "failure" when diagnosing.

Options:successfailurecanceled

List automations

list_automations
Full Description

Lists automations in an Airtable base. Returns metadata about each automation including its ID, name, deployment status, trigger info, and graph nodes. Use this when the user asks about automations configured in a base. Optionally filter by trigger type (e.g., 'agentTriggerReceived'). The returned configuration is the draft (the working copy the user edits). Set includeDeployedVersion to true to also see each automation's most recently published configuration when it differs from the draft — useful for debugging deployed behavior. Edits always apply to the draft. Do not assume baseId. Obtain it from search_bases or list_bases. {"baseId": "appZfrNIUEip5MazD"}

Parameters (1 required, 2 optional)
Required
baseIdstring

The ID of the base to list automations from. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

Optional
includeDeployedVersionboolean

When true, each returned automation includes a `deployedVersion` field showing the most recently published configuration when it differs from the draft.

triggerTypestring

Optional trigger type to filter automations by (e.g., "agentTriggerReceived").

Options:recordEntersViewrecordCreatedrecordUpdatedrecordMatchesConditionsgoogleSheetsRowCreatedgoogleFormsNewResponsegoogleCalendarEventCreatedgoogleCalendarEventChangedgoogleCalendarEventCancelledcronmicrosoftOutlookEventCreatedmicrosoftOutlookEventChangedmicrosoftOutlookNewEmailgenericWebhookReceivedemailReceivedformSubmittedinputReceivedFromConnectionagentTriggerReceivedrowCommentCreatedtestTrigger

List Airtable bases

list_bases
Full Description

Lists all bases that you have access to in your Airtable account. Use this to get the baseId of the base you want to use. Favorited and recently viewed bases are generally more relevant. If the response includes an offset, pass it in a subsequent call to retrieve the next page of results.

Parameters (0 required, 1 optional)
Optional
offsetstring

Pagination cursor from a previous list_bases response. Pass this to retrieve the next page of results.

List connected external accounts

list_external_accounts
Full Description

Lists the external accounts (integrations) accessible to the current user, including accounts they own and accounts shared with them. Each account includes its type (e.g. Google Sheets, Slack, Salesforce), a human-readable label, and an account configuration ID that can be used to reference the account in other tool calls. Only user-managed integration accounts are returned.

List interfaces and pages in a base

list_pages_for_base
Full Description

Lists all interfaces and their pages for a base. Returns metadata about each interface and the pages within it, including page IDs, names, and page-type-specific fields describing the page's data model or content.

Pages have a pageType: "list" pages support listing records directly, "dashboard" pages contain visualization elements (charts, big numbers, etc.) that aggregate data from source tables, "overview" pages contain static authored content (text, links) with no record data, and "form" pages create records in a single table.

For record list pages, use sourceTableId and tablesByTableId to understand the data model. For dashboard pages, use dashboardElements to understand what each element visualizes. Each element's config describes the aggregation (e.g., a BigNumber with summaryFunction "sum" means "sum the values of the referenced field"). To compute these values, call list_records_for_page with the element's id as elementId to fetch the underlying records, then aggregate them according to the config. Overview pages are not backed by record data and cannot be used with list_records_for_page; read their content field directly. For form pages, use name, description, and sourceTableName to identify the relevant form. Call get_form_schema for the full form structure. Forms appear in interfaces (pageType "form"), in standaloneForms (interfaceId null), or in embeddedForms — record-creation modals opened from page buttons, not navigable themselves; pass any one of the form's interfaceIds as the interfaceId. Note that the server may choose to omit form pages depending on the configuration.

Use this when the user asks about interfaces, pages, dashboards, or forms, or when a base has permissionLevel "interfaceOnly" or "none" (interface-only access).

Draft pages are pages with no published layout (never published or since unpublished). They are omitted by default; set shouldIncludeDraftPages to return them in a top-level draftPages array. When shouldIncludeRecordDetailPages is also set, draftPages additionally includes record detail pages not reachable via a published page. Use this when the user asks about draft or unpublished pages. Do not assume baseId. Obtain it from search_bases or list_bases. {"baseId": "appZfrNIUEip5MazD"}

Parameters (1 required, 3 optional)
Required
baseIdstring

The ID of the base to list pages from. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

Optional
shouldIncludeDraftPagesboolean

When true, also return this base's draft pages in a top-level draftPages array. Use this to find pages with no published layout (never published or since unpublished). When shouldIncludeRecordDetailPages is also set, draftPages additionally includes record detail pages not reachable via a published page. Each draft page includes only its id, name, interfaceId, interfaceName, and pageType, never layout detail. Callers who cannot read unpublished changes, such as those with "interfaceOnly" permissionLevel, get a permission error when setting this.

shouldIncludeRecordDetailPagesboolean

When true, also return the record detail pages this base's pages open records into, in the top-level recordDetailPages array. Each entry carries the page's table schema and per-field editability (unless shouldIncludeTableSchema is false). Before creating a page that opens records into a detail view, check here for an existing record detail page on the same table and pass its ID as the recordDetailPageId in create_page instead of creating a duplicate.

shouldIncludeTableSchemaboolean

Defaults to true. Set to false to omit tablesByTableId (the per-table field lists) from every page and record detail page entry, which makes the response much smaller for bases with many pages. Page ids, names, types, source tables, dashboard elements, and record detail linkage are still returned. Use this to survey a base's pages first, then call list_tables_for_base or this tool again with the default when you need field-level detail.

List comments on an Airtable record

list_record_comments
Full Description

Lists comments on a specific Airtable record, ordered from newest to oldest. Do not assume baseId, tableId, or recordId. Obtain these from search_bases → list_tables_for_base → list_records_for_table. Comments may contain user mentions in @[userId] or @[userGroupId] format. The mentioned field maps these IDs to display names and emails. Supports pagination via pageSize and offset parameters.

Parameters (3 required, 2 optional)
Required
baseIdstring

The ID of the base. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

recordIdstring

The ID of the record. Must start with "rec" and is 17 characters long. Example: "recZOTa3BDHxlJNzf". Do not substitute user-facing names for IDs To get recordId, use the list_records_for_table tool or display_records_for_table tools.

tableIdstring

The ID of the table. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool.

Optional
offsetstring

Pass the offset from a previous response to fetch the next page.

pageSizeinteger

The number of comments to return per page. Maximum and default is 100.

Fetch records from an interface page

list_records_for_page
Full Description

Lists records from an interface page. Pages may display data from one table (simple pages) or multiple related tables (hierarchy pages, e.g. projects → tasks).

The response contains recordsByTableId, a map from table ID to the records from that table. For simple pages this has one entry; for hierarchy pages it has one entry per configured level. Use the table IDs from list_pages_for_base to identify which table is which.

Use this for bases with permissionLevel "interfaceOnly" or "none" (interface-only access), or when the user asks about interface/page data. Do not assume baseId. Obtain it from search_bases or list_bases. Use list_pages_for_base to find the pageId or interfaceId if needed. If filtering or selecting specific fields, use list_pages_for_base if needed to find the field IDs and select choice IDs for the fieldIds and filters params.

Parameters (3 required, 4 optional)
Required
baseIdstring

The ID of the base (application) containing the page. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

interfaceIdstring

The ID of the interface that contains the page. Must start with "pbd" and is 17 characters long.

pageIdstring

The ID of the interface page to read records from. Must start with "pag" and is 17 characters long. Example: "pagXxYyZzAaBbCcDd".

Optional
elementIdstring

The ID of a specific element to query records for. Required for dashboard pages. Obtain element IDs from the dashboardElements array in the list_pages_for_base response. Must start with "pel" and is 17 characters long.

fieldIdsarray

Only data for fields whose IDs are in this list will be included in the result. Pass in only the fields most useful for the user to see. If not provided, the fields visible in the page element's visualization will be returned. For hierarchy pages, field IDs are matched against each table — a field belonging to the projects table will filter the projects records, and one belonging to the tasks table will filter the tasks records. You can mix field IDs from different tables. Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool. For interface-only bases, use the field IDs from the list_pages_for_base response instead.

filtersobject

Additional filters to apply on top of the page element's built-in filters. These are combined with the element's static filters using AND. For hierarchy pages, filters apply only to the source level's table. Related levels may be constrained indirectly through the hierarchy's foreign key relationships. Describes the filters to apply to the records using a structured format. Example filter where the value of the field with ID "fld8WsrpLHHevsnW8" is "orange" or the value of the field with ID "fldulcCPDVz87Bmnw" is greater than 5: {"operator": "or", "operands": [{"operator": "=", "operands": ["fld8WsrpLHHevsnW8", "orange"]}, {"operator": ">", "operands": ["fldulcCPDVz87Bmnw", 5]}]} Example filter where the value of the collaborator field with ID "fldCRi9oz2vRLcIWr" can be any user in a group with ID "ugpDUVUnftA7H9bG8" and the value of the field with ID "fldgD18XtsueoiguT" equals select option with ID "selha8nGNAT5ATR7P": {"operator": "and", "operands": [{"operator": "hasAnyOf", "operands": ["fldCRi9oz2vRLcIWr", "ugpDUVUnftA7H9bG8"], "operatorOptions": {"matchGroupsByMembership": true}}, {"operator": "=", "operands": ["fldgD18XtsueoiguT", "selha8nGNAT5ATR7P"]}]} Example filter for records where a date field is within the past week: {"operands": [{"operator": "isWithin", "operands": ["fldABC12345678x", {"mode": "pastWeek", "timeZone": "America/New_York"}]}]} Example filter for records where a field is not empty: {"operands": [{"operator": "isNotEmpty", "operands": ["fldABC12345678x"]}]}

pageSizeinteger

The maximum number of records to return in the response. The server may respond with fewer records than this value when the total set has fewer records than this value.

Fetch records for processing or analysis

list_records_for_table
Full Description

Lists records queried from an Airtable table. Do not assume baseId and tableId. Obtain these from search_bases → list_tables_for_base. Do not attempt to pass filterByFormula. Look carefully at the filters parameter. Pre-requisite: If filtering on singleSelect/multipleSelects fields, and the choice name is not provided, you must call get_table_schema first to get the choice IDs. Aim to provide at least 6 relevant fields via the 'fieldIds' parameter. Note: singleSelect and multipleSelects field values are returned as objects (e.g., {"id": "sel...", "name": "Option", "color": "blue"}) or arrays of such objects. When writing these values back via create_records_for_table or update_records_for_table, use the plain string name (e.g., "Option") instead of the object. If the base is not found or returns a permission error, the user may have interface-only access. Try list_records_for_page instead.

Parameters (2 required, 6 optional)
Required
baseIdstring

The ID of the base containing the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

tableIdstring

The table to list records from. Accepts either a table ID (e.g., "tblGlReoTNWfYnXIG") or a table name (e.g., "Orders"). Names are resolved case-insensitively within the base. To discover tables, use the list_tables_for_base tool.

Optional
cursorstring

The cursor to start from. To begin from the first record, do not include a cursor. For a subsequent paginated request, include the nextCursor from the previous response.

fieldIdsarray

Only data for fields whose IDs or names are in this list will be included in the result. Pass in only the fields most useful for the user to see. If not provided, all fields will be included in the result. Accepts either a field ID (e.g., "fldGlRtkBNWfYnPOV") or a field name (e.g., "Status"). Names are resolved case-sensitively within the table. To discover fields, use the list_tables_for_base tool.

filtersobject

Describes the filters to apply to the records using a structured format. Example filter where the value of the field with ID "fld8WsrpLHHevsnW8" is "orange" or the value of the field with ID "fldulcCPDVz87Bmnw" is greater than 5: {"operator": "or", "operands": [{"operator": "=", "operands": ["fld8WsrpLHHevsnW8", "orange"]}, {"operator": ">", "operands": ["fldulcCPDVz87Bmnw", 5]}]} Example filter where the value of the collaborator field with ID "fldCRi9oz2vRLcIWr" can be any user in a group with ID "ugpDUVUnftA7H9bG8" and the value of the field with ID "fldgD18XtsueoiguT" equals select option with ID "selha8nGNAT5ATR7P": {"operator": "and", "operands": [{"operator": "hasAnyOf", "operands": ["fldCRi9oz2vRLcIWr", "ugpDUVUnftA7H9bG8"], "operatorOptions": {"matchGroupsByMembership": true}}, {"operator": "=", "operands": ["fldgD18XtsueoiguT", "selha8nGNAT5ATR7P"]}]} Example filter for records where a date field is within the past week: {"operands": [{"operator": "isWithin", "operands": ["fldABC12345678x", {"mode": "pastWeek", "timeZone": "America/New_York"}]}]} Example filter for records where a field is not empty: {"operands": [{"operator": "isNotEmpty", "operands": ["fldABC12345678x"]}]}

pageSizeinteger

The maximum number of records to return in the response. The server may respond with fewer records than this value when the total set has fewer records than this value.

recordIdsarray

An array of record IDs to filter by. Only records with these IDs will be returned. Must start with "rec" and is 17 characters long. Example: "recZOTa3BDHxlJNzf". Do not substitute user-facing names for IDs To get recordId, use the list_records_for_table tool or display_records_for_table tools.

sortarray

A list of sort objects that specifies how the records will be ordered. Each sort object must have a fieldId key specifying the field to sort on (ID or name), and an optional direction key that is either "asc" or "desc". The default direction is "asc". Records are sorted by the first sort object first, then by the second sort object for records that have the same value for the first sort, and so on. Example sort by a single field in descending order: [{"fieldId": "Status", "direction": "desc"}] Example sort by two fields, first ascending then descending: [{"fieldId": "Priority", "direction": "asc"}, {"fieldId": "Created", "direction": "desc"}]

List secrets

list_secrets
Full Description

Lists the secrets accessible to the current user, including secrets they own and secrets shared with them via user groups. Use the returned IDs when configuring custom script automation actions that need secret access.

Returns the summary of the specified base

list_tables_for_base
Full Description

Gets the summary of a specific base. This includes the schemas of all tables in the base, including field name and type. If the base is not found or returns a permission error, the user may have interface-only access. Try list_pages_for_base instead.

Parameters (1 required)
Required
baseIdstring

The ID of the base to get the summary of. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

List views in a table

list_views_for_table
Full Description

Lists the views in a table, returning each view's ID, name, and type. Use this to discover viewId values needed by other tools, such as an automation trigger that fires on records entering a view. Do not assume baseId. Obtain it from search_bases or list_bases. {"baseId": "appZfrNIUEip5MazD", "tableId": "Orders"}

Parameters (2 required)
Required
baseIdstring

The ID of the base that contains the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

tableIdstring

The table to list views from. Accepts either a table ID (e.g., "tblGlReoTNWfYnXIG") or a table name (e.g., "Orders"). Names are resolved case-insensitively within the base. To discover tables, use the list_tables_for_base tool.

List Airtable workspaces

list_workspaces
Full Description

Lists all workspaces the current user has access to, along with their permission level in each. No dependencies. This is typically the first tool to call when you need a workspaceId.

Parameters (0 required, 1 optional)
Optional
offset

Pagination offset from the previous response. Pass this to retrieve the next page of results. Omit for the first page.

Ping

ping
Full Description

Ping the MCP server to check if it is running

Publish an interface

publish_interface
Full Description

Publishes an interface, promoting each page's working draft to the live version that end users see. This includes any draft edits made outside this conversation, so publishing may make more changes live than just the ones made here. Pages whose publishing state is "disabled" are skipped and remain as drafts. Publishing is idempotent: re-publishing an already-published interface with no new changes is a no-op. Use search_bases or list_bases to find the appropriate baseId. Use list_pages_for_base to find the interfaceId if needed. Use create_interface and create_page to create a new interface to publish.

Parameters (2 required)
Required
baseIdstring

The ID of the base containing the interface. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

interfaceIdstring

The ID of the interface to publish. Must start with "pbd" and is 17 characters long.

Reverts a previous Airtable mutation

revert_action
Full Description

Reverts a previous eligible Airtable mutation by performing the inverse write, using the actionId it returned. Record updates are not revertible. Use the actionId returned by an eligible mutating tool result. A tool result is eligible only if it explicitly returns an actionId. Examples include create_records_for_table or delete_records_for_table. Reverts one actionId per call (a multi-action revert is not atomic). To revert several, call once per actionId in reverse completion order, stopping on the first error. Example: revert an eligible mutation: {"baseId": "appZfrNIUEip5MazD", "actionId": "actZOTa3BDHxlJNzf"}

Parameters (2 required)
Required
actionIdstring

The ID of the action to revert, from a prior eligible tool result in this session. Must start with "act" and is 17 characters long. Example: "actZOTa3BDHxlJNzf".

baseIdstring

The ID of the base the action ran in — the same baseId you used for the mutation that returned this actionId. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

Search for an Airtable base

search_bases
Full Description

Searches for bases by name. This is useful when you need to find a specific base quickly by a partial name-based match. Returns bases sorted by their relevance score, as well as a recommended base ID and a hint on whether we need to ask the user to explicitly select the base they want to use.

Parameters (1 required)
Required
searchQuerystring

The query to search for bases by name. The search is case-insensitive and works with partial matches. Examples: "projects", "issues", "customers"

Search candidate records for a linked-record field

search_candidate_linked_records
Full Description

Searches for records that are valid candidates for a linked-record (foreign-key) field, returning each candidate's record ID along with the fields the linked-record field is configured to display (the same fields shown on the in-product card). Use this to find the record ID to put in a linked-record field when calling submit_form or update_records_for_table. Use list_pages_for_base to find the pageId if needed. Use get_form_schema (for forms) to discover the linked field's fieldId. Pass the fieldId of the linked-record field you are filling (not the table it links to — the foreign table is resolved automatically). The pageId must be a page that surfaces the linked field: for submit_form this is the form's pageId; for update_records_for_table pass the interface page that shows the record/field being edited. Pass interfaceId when the page lives inside an interface; omit it for a standalone form.

A linked-record field's candidates can be restricted by dynamic filters that reference the record's OTHER field values, so you must supply those values for the filters to apply: when filling a NEW record (e.g. for submit_form), always pass fields with the other values you have so far or plan to submit; when editing an EXISTING record, pass recordId, plus fields for any other values you are changing in the same update (a value in fields takes precedence over the record's stored value; anything not in fields falls back to the stored value). If you pass neither, the filters are evaluated against blank values and the results may include records that are not actually selectable, or miss ones that are.

Parameters (4 required, 4 optional)
Required
baseIdstring

The ID of the base containing the page and the linked-record field. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

fieldIdstring

The ID of the linked-record (foreign-key) field whose candidate records you want to search. Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

pageIdstring

The ID of the page that surfaces the linked-record field. Must start with "pag" and is 17 characters long. Example: "pagXxYyZzAaBbCcDd".

querystring

The text to search candidate records by. Matching is case-insensitive against each record's display name. Pass an empty string to list candidates without filtering.

Optional
fieldsobject

The values entered so far (or planned) for the OTHER fields of the record being filled. The linked field's cross-field dynamic record-selection filters are evaluated against these values, and omitting them can return records that are not actually selectable. When searching candidates for a new record (e.g. a submit_form submission), always pass every other field value you know. When editing an existing record (recordId provided), pass the values you are changing in the same update — each value here overrides the record's stored value, and fields not passed fall back to the stored values. Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

interfaceIdstring

The ID of the interface containing the page, or null/omitted for a standalone form (one that is not inside an interface). Must start with "pbd" and is 17 characters long.

limitinteger

The maximum number of records to return. The server may return fewer. Defaults to a small page size when omitted.

recordIdstring

The ID of the EXISTING record being updated, when searching linked records in the context of an existing record (e.g. for update_records_for_table). The record's stored values are used to apply the linked field's cross-field dynamic record-selection filters, except for values you also pass in fields, which take precedence — so pass both when the update changes a value those filters depend on. Must start with "rec" and is 17 characters long. Example: "recZOTa3BDHxlJNzf". Do not substitute user-facing names for IDs To get recordId, use the list_records_for_table tool or display_records_for_table tools.

Search records in an Airtable table

search_records
Full Description

Searches for records in a table using a free-text query. Uses an optimized full-text index that supports fuzzy matching (handles typos) and token-based search (matches individual words regardless of order). When available, returns full record cell values and supports filtering and sorting of results. Call list_tables_for_base first to discover available tables and fields if needed. Prefer this over list_records_for_table when performing free-text search on large tables. Use list_records_for_table instead when filtering by exact field values or structured filters. Not all field types are searchable. Date, rating, checkbox, and button fields are not indexed. Formula, rollup, and lookup fields are only searchable if their result type is searchable. If you need to query by unsearchable field types, use list_records_for_table with filters instead.

Parameters (4 required, 2 optional)
Required
baseIdstring

The ID of the base containing the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

fieldsarray

The fields to search over. Either pass an array of field IDs/names, or the literal string "ALL_SEARCHABLE_FIELDS" to search across all searchable fields in the table. Field IDs look like "fldGlRtkBNWfYnPOV". Field names (e.g., "Status") are resolved case-insensitively. Note: Not all field types are searchable. If this fails, fallback to using the list_records_for_table tool instead.

querystring

The search query. Matches are case-insensitive and term-order independent. Examples: "acme" matches "Acme Corp", "john smith" matches "Smith, John", ""Q1 Report"" (quoted) matches the exact phrase only.

tablestring

The table to search. Accepts either a table ID (e.g., "tblGlReoTNWfYnXIG") or a table name (e.g., "Orders"). Names are resolved case-insensitively within the base.

Optional
limitinteger

The maximum number of records to return, ordered by search relevance. Defaults to 100. Maximum 500.

resultFieldIdsarray

The field IDs or names of the fields to include in the result. If not provided, defaults to the fields being searched over (the "fields" parameter), or to all fields when searching over ALL_SEARCHABLE_FIELDS. Pass this explicitly to include fields beyond the ones being searched. Accepts either a field ID (e.g., "fldGlRtkBNWfYnPOV") or a field name (e.g., "Status"). Names are resolved case-sensitively within the table. To discover fields, use the list_tables_for_base tool.

Submit a form

submit_form
Full Description

Submits a form, creating a new record in the form's source table. Call get_form_schema first on the form's pageId to discover which fields the form collects, their fieldIds, types, required/read-only flags, select-field choices, and any prefilled values and visibility filters — do not assume every column on the source table is on the form. The schema response includes the interfaceId (null for standalone forms) to pass back here. For linked-record fields, use search_candidate_linked_records to find the record IDs to submit. Always include that tool's fields param with the other values you plan to submit here, so its results respect the linked field's dynamic record-selection filters. Use list_pages_for_base to find the pageId if needed. Pass the baseId and pageId of the form, the interfaceId if the form lives inside an interface (otherwise omit it), and a fields object mapping field IDs to cell values (same shape as the create_records_for_table tool).

For singleSelect and multipleSelects fields, the value must be a choice name from the field's options.choices in the get_form_schema response, exactly as written there — do not invent or reword option names.

Supports entry-level form pages and record-creation row forms (forms embedded in other interface page types).

Respect the visibility filters from get_form_schema: do not submit a value for any field hidden by its own visibilityFilters or its section's visibilityFilters.

A field is visible only when the submitted values satisfy its filter and the filters of any fields it depends on. Do not set a field that wasn't requested just to make another visible. If a hidden field is requested to be filled but the values don't reveal it, confirm how to proceed before submitting. {"baseId": "appXxx...", "pageId": "pagXxx...", "interfaceId": "pbdXxx...", "fields": {"fldXxx...": "Hello world"}}

Parameters (3 required, 1 optional)
Required
baseIdstring

The ID of the base containing the form page. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

fieldsobject

An object containing field IDs as keys and field values as values. Field values should match the field type (e.g., strings for singleLineText fields, numbers for numeric fields, arrays of strings for multipleSelects fields). For singleSelect fields, use the option name as a plain string (e.g., "Done"). For multipleSelects fields, use an array of option name strings (e.g., ["Tag1", "Tag2"]). For multipleRecordLinks (linked-record) fields, use an array of record IDs from the linked table. Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

pageIdstring

The ID of the form page to submit. Must start with "pag" and is 17 characters long. Example: "pagXxYyZzAaBbCcDd".

Optional
interfaceIdstring

The ID of the interface containing the form page, or null/omitted for a standalone form. When set, this is required so the agent's interface-level access permissions are evaluated correctly. Must start with "pbd" and is 17 characters long.

Test an automation webhook trigger

test_automation_webhook_trigger
Full Description

Re-runs the trigger test for a genericWebhookReceived automation and waits briefly for a newly captured payload schema. This is an automation trigger operation, not an Airtable Webhooks API operation. Call get_automation first. The external system must POST a representative object payload to the returned webhookUrl before this tool can capture its schema. For a deployed automation, posting the sample also runs the live automation and may cause side effects. This tool does not send the sample or deploy or undeploy the automation. {"baseId": "appZfrNIUEip5MazD", "automationId": "wflGlRtkBNWfYnPOV"}

Parameters (2 required)
Required
automationIdstring

The ID of the automation whose webhook trigger should be tested. Must start with "wfl" and is 17 characters long. Example: "wflGlRtkBNWfYnPOV". To get an automationId, use the create_automation tool.

baseIdstring

The ID of the base containing the automation. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

Update an automation

update_automation
Full Description

Replaces the entire draft configuration (trigger, graph, name, description) of an existing automation. If the automation is on, live behavior is unchanged until unpublished changes are applied with Update in the Airtable UI. Use list_automations to find the automationId, then call get_automation to retrieve the current trigger, nodes, and description before updating — list_automations returns node summaries without their inputs. Call get_create_automation_instructions once per session for the full catalog of trigger types, action types, and expression shapes. This is a full replacement — all fields (trigger, nodes, name, description) must be provided, even if only one changed. The previous configuration is discarded entirely.

On success, the response includes an actionId that can be passed to revert_action to undo the update and restore the previous configuration.

Parameters (5 required, 1 optional)
Required
automationIdstring

The ID of the automation to update. Must start with "wfl" and is 17 characters long. Example: "wflGlRtkBNWfYnPOV". To get an automationId, use the create_automation tool.

baseIdstring

The ID of the base containing the automation. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

namestring

Name for the automation.

nodesarray

Ordered array of nodes (actions, repeatingGroup, or conditionalGroup). Groups (conditionalGroup/repeatingGroup) may be nested at most 2 levels deep. See create_automation description for semantics and the expression language.

triggerobject

Trigger configuration.

Optional
descriptionstring

Optional description for the automation.

Updates the name, description, and/or options of a field in an Airtable table

update_field
Full Description

Updates the name, description, and/or options of a field in an existing Airtable table. At least one of name, description, or options must be specified. To get baseId and tableId, use the search_bases and list_tables_for_base tools first. To get the fieldId, use the list_tables_for_base tool. Example: update a field's name and description: {"baseId": "appZfrNIUEip5MazD", "tableId": "tblGlReoTNWfYnXIG", "fieldId": "fldGlRtkBNWfYnPOV", "name": "Updated Name", "description": "Updated description"} Example: update a formula field's expression: {"baseId": "appZfrNIUEip5MazD", "tableId": "tblGlReoTNWfYnXIG", "fieldId": "fldGlRtkBNWfYnPOV", "options": {"formula": "{Quantity} * {Price}"}}

Parameters (3 required, 3 optional)
Required
baseIdstring

The ID of the base containing the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

fieldIdstring

The ID of the field to update. Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

tableIdstring

The ID of the table containing the field. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool.

Optional
descriptionstring
namestring

The new name for the field. Must be unique within the table (case-insensitive).

optionsobject

Type-specific field options.

Updates multiple records in an Airtable table

update_records_for_table
Full Description

Updates records in an Airtable table. The fields you specify will be updated, and all other fields will be left unchanged. To get baseId and tableId, consider using the search_bases and list_tables_for_base tools first. When writing to a linked-record (multipleRecordLinks) field through an interface page, get the record IDs from search_candidate_linked_records, passing a pageId that exposes the field for editing — it also applies the field's record-selection filters. It only works within interfaces; for base-level writes, use record IDs from the linked table. For singleSelect/multipleSelects fields, provide the option name as a plain string (e.g., "In progress") or array of strings, not the object format returned by list_records_for_table. By default the response includes only the fields you wrote. To also include fields you did not write (e.g. the primary field or formula results), pass their IDs in fieldIds. You can update up to 50 records per request. To update more than 50 records, make multiple requests. Example: update a record's fields: {"baseId": "appZfrNIUEip5MazD", "tableId": "tblGlReoTNWfYnXIG", "records": [{"id": "recZOTa3BDHxlJNzf", "fields": {"fldGlRtkBNWfYnPOV": "Updated name", "fld8WsrpLHHevsnW8": "Done"}}]}

Parameters (3 required, 4 optional)
Required
baseIdstring

The ID of the base containing the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

recordsarray

An array of record objects to update. Each record must have a "fields" property containing the field values.

tableIdstring

The ID of the table to update records in. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool.

Optional
fieldIdsarray

The IDs of the fields to include in each returned record. If omitted, only the fields you wrote (the keys of records[].fields, unioned across all input records) are returned. Pass explicit IDs to include fields you did not write (e.g. the primary field or formula/rollup results). Field IDs must start with "fld" and is 17 characters long. Example: "fldGlRtkBNWfYnPOV". Do not substitute user-facing names for IDs. To get fieldId, use the list_tables_for_base tool.

interfaceContextobject

Set this only when the user lacks base access (which can be determined by the permission listed on list_bases) and is updating records through an interface they collaborate on. When provided, the update is authorized against the user's collaborator permissions on the given interface instead of base-level permissions.

performUpsertobject

Enables upsert behavior when set. When upserting is enabled, the recordId parameter is optional. Records that do not include a recordId will use the fields chosen by the fieldIdsToMergeOn parameter to match with existing records. - If no matches are found, a new record will be created. - If a match is found, that record will be updated. - If multiple matches are found, the request will fail. Records that include id will ignore fieldIdsToMergeOn and behave as normal updates. If no record with the given id exists, the request will fail and will not create a new record

typecastboolean

Whether or not to perform best-effort automatic data conversion from string values. Defaults to false to preserve data integrity.

Updates an existing table in an Airtable base

update_table
Full Description

Updates an existing table's name and/or description in an Airtable base. To get baseId and tableId, use the search_bases and list_tables_for_base tools first. At least one of name or description must be provided. Example: update a table's name and description: {"baseId": "appZfrNIUEip5MazD", "tableId": "tblGlReoTNWfYnXIG", "name": "Updated Name", "description": "New description"}

Parameters (2 required, 2 optional)
Required
baseIdstring

The ID of the base containing the table. Must start with "app" and is 17 characters long. Example: "appZfrNIUEip5MazD". Do not substitute user-facing names for baseId. To get baseId, use the search_bases or list_bases tool.

tableIdstring

The ID of the table to update. Must start with "tbl" and is 17 characters long. Example: "tblGlReoTNWfYnXIG". Do not substitute user-facing names for tableId. To get tableId, use the list_tables_for_base tool.

Optional
descriptionstring
namestring

The new name for the table. Must be unique within the base (case-insensitive).