create_base
ChatGPTCreates 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}}]}]}
create_field
ChatGPTCreates 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}"}}}
create_interface
ChatGPTCreates 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. Once confirmed by the user, use publish_interface to publish the pages in the interface to their live versions.
create_page
ChatGPTCreates a new page within an existing interface. Supported page types: visualization and dashboard. Supported visualization types for "visualization" pages: kanban, list, calendar, gallery, grid, and timeline. Use list_bases or search_bases to find the appropriate baseId. Use create_interface to create a new interface to house the page, or list_pages_for_base to discover existing interfaces in which to create the page. 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 after asking for confirmation from the user.
create_records_for_table
ChatGPTCreates 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"]}}]}
create_table
ChatGPTCreates 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"}]}}]}
delete_page
ChatGPTDeletes 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. The agent MUST ask the user for explicit confirmation before calling this tool. Page deletion is destructive and should not be performed without the user's go-ahead. Use list_pages_for_base to find the appropriate pageId. After deleting, only offer to run publish_interface (with the user's confirmation) 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.
delete_records_for_table
ChatGPTDeletes 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"]}
describe_page_element
ChatGPTReturns 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.
describe_page_type
ChatGPTReturns 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.
display_records_for_table
ChatGPTDisplays 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.
get_record_for_page
ChatGPTGets 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
get_table_schema
ChatGPTGets 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"]}]}
list_bases
ChatGPTLists 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.
list_pages_for_base
ChatGPTLists 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"}
list_records_for_page
ChatGPTLists 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.
list_records_for_table
ChatGPTLists 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.
list_tables_for_base
ChatGPTGets 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.
list_workspaces
ChatGPTLists 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.
ping
ChatGPTPing the MCP server to check if it is running
publish_interface
ChatGPTPublishes an interface, promoting each page's working draft to the live version that end users see. 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 discover interfaces and their pages. Use create_interface and create_page to create a new interface, or list_pages_for_base to discover existing interfaces, to publish.
revert_action
ChatGPTReverts 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"}
search_bases
ChatGPTSearches 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.
search_records
ChatGPTSearches 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.
update_field
ChatGPTUpdates 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}"}}
update_records_for_table
ChatGPTUpdates 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"}}]}
update_table
ChatGPTUpdates 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"}
create_field
Claudecreate_records_for_table
Claudecreate_table
Claudeget_table_schema
Claudelist_bases
Claudelist_records_for_table
Claudelist_tables_for_base
Claudeping
Claudesearch_bases
Claudeupdate_field
Claudeupdate_records_for_table
Claudeupdate_table
Claude