Airtable

Airtable is the database and operations layer for your agents — whether running product, marketing, sales, ops, HR, or a custom business app.

От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетБез входаГлобальныйБесплатноТолько чтение

Что умеет

  • Ping: Ping the MCP server to check if it is running
  • List Bases: 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. I
  • List Workspaces: 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.

Какие данные видит

Нужен ли аккаунт

Не нужен: сервер работает без входа

Airtable is the database and operations layer for your agents — whether running product, marketing, sales, ops, HR, or a custom business app. It combines structured data with multiplayer visual surfaces (grid, kanban, calendar, gallery, timeline) humans and agents share. This plugin makes your agent fluent in Airtable: creating bases and schema, working with records, and sharing UI for collaboration. Bundles the official Airtable MCP server.

Список инструментов сервера (23)

Технические названия из tools/list. Нужны только разработчикам.

pingPing the MCP server to check if it is running
list_basesLists 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_workspacesLists 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.
search_basesSearches 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.
list_tables_for_baseGets 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.
get_table_schemaGets 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_records_for_tableLists 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_record_commentsLists 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.
create_record_commentCreates 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.
create_records_for_tableCreates 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"]}}]}
update_records_for_tableUpdates 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"}}]}
delete_records_for_tableDeletes 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"]}
create_baseCreates 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_tableCreates 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"}]}}]}
update_tableUpdates 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_fieldCreates 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}"}}}
update_fieldUpdates 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}"}}
list_records_for_pageLists 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_pages_for_baseLists 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"}
get_record_for_pageGets 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
search_recordsSearches 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.
get_additional_instructionsIMPORTANT: Before using this MCP server, you MUST call get_additional_instructions. It returns required context for working with the Airtable MCP correctly.
report_missing_capabilityReports a missing capability to the Airtable MCP server so new tools can be prioritized. *Call once per distinct missing capability* you confirm in a session - including when you've already told the user, found a workaround, or the user cancelled. Having reported a different gap this session does not exempt you from reporting a new one. *Do not call* if you haven't searched thoroughly, if the request is outside of Airtable's scope, if a tool likely exists but you can't find it (search again) *Privacy*: Describe capabilities in abstract, general terms — do NOT include any user-specific data such as base/table/field names, record contents, or any information from the user's account or workspace. Good: "Duplicate an existing base into a new one". Bad: "Duplicate the Client Contacts base".