← Back to all apps

Airtable

Productivityby Airtable
Launched May 21, 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.

22ChatGPT Tools
12Claude Tools
AirtableDeveloper
ProductivityCategory

Use Cases

data

Available Tools

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".

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 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. 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, 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.

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.

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". Remaining fields can be any type.

namestring

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

Optional
descriptionstring

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 records by ID: {"baseId": "appZfrNIUEip5MazD", "tableId": "tblGlReoTNWfYnXIG", "recordIds": ["recZOTa3BDHxlJNzf", "recABCDEFGHIJKLMN"]}

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.

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.

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. Defaults to 1000.

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

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 "none" (interface-only access), or when the user asks about interface/page data. Obtain pageId from list_pages_for_base. Do not assume baseId. Obtain it from search_bases or list_bases

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.

Gets table schema for the given tables, which consist of table IDs and field IDs

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 and corresponding field IDs to get schema information for. 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 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 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, and "overview" pages contain static authored content (text, links) with no record data.

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.

Use this when the user asks about interfaces, pages, or dashboards, or when a base has permissionLevel "none" (interface-only access). Do not assume baseId. Obtain it from search_bases or list_bases. {"baseId": "appZfrNIUEip5MazD"}

Parameters (1 required)
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.

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 "none" (interface-only access), or when the user asks about interface/page data. Obtain pageId from list_pages_for_base. Do not assume baseId. Obtain it from search_bases or list_bases.

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.

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. Defaults to 1000.

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"}]

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 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

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 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). 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)
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.

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. 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, 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 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.

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).