Airtable
Read and write Airtable records and comments, read base schemas, create bases, tables and fields, and manage change webhooks. Connects with OAuth.
- rest
https://api.superagnt.com/v1/connections/airtableplus the vendor's own path, with your superagnt_ API key asAuthorization: Bearer.- mcp
- Tools named
connection_airtable_*onhttps://mcp.superagnt.com/mcp, served once the account is connected. - billing
- Airtable bills your own account. Calls cost no superagnt_ data credits.
- rate limit
- 5 requests a second, 300 a minute: the vendor's ceiling as the registry records it, for sizing bursts. Your plan's own limit is on Connections.
The Airtable connection lets an agent read and write the records of the bases you grant it, up to 10 records in a call, including upserts on merge fields. It also reads and posts record comments, reads base schemas, creates bases, creates and updates tables and fields, and manages the change webhooks that report edits to a base.
01
Setup
- Start the install. In the superagnt app open Integrations, pick Airtable and click Connect with Airtable.
- Grant your bases. In the window Airtable opens, choose the bases the connection may reach and approve access.
- Call Airtable. Airtable moves to Enabled: its REST route answers and its tools appear on your MCP server.
The install asks for data.records:read, data.records:write, data.recordComments:read, data.recordComments:write, schema.bases:read, schema.bases:write, user.email:read and webhook:manage. To reach another base later, click Reconnect on the Airtable connection page in the superagnt app and grant it.
02
Things to know
- Reads return
{ records, offset }. Page withpageSize(up to 100) and theoffsetthe previous page returned, and narrow withfilterByFormula(field names in curly braces, strings in single quotes),view,fields[]andmaxRecords. - Creates, updates and replaces take up to 10 records a call, as
{ records: [{ fields }] }, with each record'sidon an update or replace. AddperformUpsert: { fieldsToMergeOn: [...] }to update the records that match on those fields and create the rest. PATCHchanges only the fields you send.PUTreplaces the record and clears every field you leave out.- A change webhook expires after 7 days unless you refresh it. Airtable pings its
notificationUrlwhen changes are waiting, and you read them withconnection_airtable_webhooks_readactionlist_payloads. - By default a superagnt_ agent runs reads without asking, asks before writes, and always asks a person before deleting records, comments or webhooks (Permissions).
03
Examples
List records with a filter
curl -G "https://api.superagnt.com/v1/connections/airtable/v0/appXXXXXXXXXXXXXX/Tasks" \
-H "Authorization: Bearer $AGNTDATA_API_KEY" \
--data-urlencode "filterByFormula={Status}='Todo'" \
--data-urlencode "pageSize=100"Create records
curl -X POST "https://api.superagnt.com/v1/connections/airtable/v0/appXXXXXXXXXXXXXX/Tasks" \
-H "Authorization: Bearer $AGNTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"records":[{"fields":{"Name":"Investigate flaky test","Status":"Todo"}}],"typecast":true}'Upsert on a merge field
curl -X PATCH "https://api.superagnt.com/v1/connections/airtable/v0/appXXXXXXXXXXXXXX/Tasks" \
-H "Authorization: Bearer $AGNTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"performUpsert":{"fieldsToMergeOn":["External ID"]},"records":[{"fields":{"External ID":"ext-42","Status":"Done"}}]}'Read a base's schema
curl "https://api.superagnt.com/v1/connections/airtable/v0/meta/bases/appXXXXXXXXXXXXXX/tables" \
-H "Authorization: Bearer $AGNTDATA_API_KEY"13 tools, one per resource and risk
MCP servers and agents on the grouped surface list Airtable as these tools. Each takes an action, and the ones that work across record types an object. Every operation also keeps its own per-operation name, in the next table, which works on every server. How grouping works: Grouped tools.
| Tool | Risk | Actions |
|---|---|---|
connection_airtable_records_readRead Airtable records Read the records of an Airtable table, filtered with a formula such as {Status}='New' or by a view. baseId starts with app; tableIdOrName is the table id (tbl…) or its name, both from connection_airtable_bases_read. | read | listget |
connection_airtable_records_writeWrite Airtable records Create, update or replace records in an Airtable table (fields map field names or ids to cell values; typecast: true converts strings to the field types). Replacing clears every field the call leaves out. | write | createupdateupdate_manyreplacereplace_many |
connection_airtable_records_deleteDelete Airtable records Permanently delete Airtable records: one, or up to 10 at once. | destructive | deletedelete_many |
connection_airtable_comments_readRead Airtable record comments List the comments on a record. | read | list |
connection_airtable_comments_writeComment on Airtable records Add a comment to a record, or edit one. | write | createupdate |
connection_airtable_comments_deleteDelete an Airtable comment Permanently delete a comment on a record. | destructive | delete |
connection_airtable_bases_readRead Airtable bases and schemas List the bases the token can reach, read a base's schema (its tables, fields and views, with the ids the other Airtable tools take), or identify the token's user. | read | listget_schemawhoami |
connection_airtable_bases_writeCreate an Airtable base Create a base in a workspace, with its first tables. | write | create |
connection_airtable_tables_writeCreate and update Airtable tables Create a table in a base, or rename or re-describe one. | write | createupdate |
connection_airtable_fields_writeCreate and update Airtable fields Add a field to a table, or rename or re-describe one (a field's type cannot be changed). A field is { name, type, options } where options depend on the type, such as the choices of a singleSelect. | write | createupdate |
connection_airtable_webhooks_readRead Airtable webhooks List the change webhooks on a base, or read the change payloads a webhook has buffered since a cursor. | read | listlist_payloads |
connection_airtable_webhooks_writeManage Airtable webhooks Register a change webhook on a base (specification.options.filters picks the changes to watch), extend its 7-day expiry, or turn its notification pings on or off. | write | createrefreshset_notifications |
connection_airtable_webhooks_deleteDelete an Airtable webhook Permanently delete a webhook on a base. | destructive | delete |
All 27 operations
Each operation is a REST path under https://api.superagnt.com/v1/connections/airtable and an MCP tool. The per-operation tool name is the one permissions, approvals and usage records use.
| Operation | MCP tool |
|---|---|
GET /v0/{baseId}/{tableIdOrName}List records | connection_airtable_list_recordsgrouped: connection_airtable_records_read, action list |
POST /v0/{baseId}/{tableIdOrName}Create records | connection_airtable_create_recordsgrouped: connection_airtable_records_write, action create |
PUT /v0/{baseId}/{tableIdOrName}Update multiple records (replace) | connection_airtable_replace_recordsgrouped: connection_airtable_records_write, action replace_many |
PATCH /v0/{baseId}/{tableIdOrName}Update multiple records (partial) | connection_airtable_update_recordsgrouped: connection_airtable_records_write, action update_many |
DELETE /v0/{baseId}/{tableIdOrName}Delete multiple records | connection_airtable_delete_recordsgrouped: connection_airtable_records_delete, action delete_many |
GET /v0/{baseId}/{tableIdOrName}/{recordId}Get record | connection_airtable_get_recordgrouped: connection_airtable_records_read, action get |
PUT /v0/{baseId}/{tableIdOrName}/{recordId}Replace record | connection_airtable_replace_recordgrouped: connection_airtable_records_write, action replace |
PATCH /v0/{baseId}/{tableIdOrName}/{recordId}Update record (partial) | connection_airtable_update_recordgrouped: connection_airtable_records_write, action update |
DELETE /v0/{baseId}/{tableIdOrName}/{recordId}Delete record | connection_airtable_delete_recordgrouped: connection_airtable_records_delete, action delete |
GET /v0/{baseId}/{tableIdOrName}/{recordId}/commentsList record comments | connection_airtable_list_commentsgrouped: connection_airtable_comments_read, action list |
POST /v0/{baseId}/{tableIdOrName}/{recordId}/commentsCreate record comment | connection_airtable_create_commentgrouped: connection_airtable_comments_write, action create |
PATCH /v0/{baseId}/{tableIdOrName}/{recordId}/comments/{rowCommentId}Update record comment | connection_airtable_update_commentgrouped: connection_airtable_comments_write, action update |
DELETE /v0/{baseId}/{tableIdOrName}/{recordId}/comments/{rowCommentId}Delete record comment | connection_airtable_delete_commentgrouped: connection_airtable_comments_delete, action delete |
GET /v0/meta/basesList bases | connection_airtable_list_basesgrouped: connection_airtable_bases_read, action list |
POST /v0/meta/basesCreate base | connection_airtable_create_basegrouped: connection_airtable_bases_write, action create |
GET /v0/meta/bases/{baseId}/tablesGet base schema (list tables) | connection_airtable_get_base_schemagrouped: connection_airtable_bases_read, action get_schema |
POST /v0/meta/bases/{baseId}/tablesCreate table | connection_airtable_create_tablegrouped: connection_airtable_tables_write, action create |
PATCH /v0/meta/bases/{baseId}/tables/{tableId}Update table | connection_airtable_update_tablegrouped: connection_airtable_tables_write, action update |
POST /v0/meta/bases/{baseId}/tables/{tableId}/fieldsCreate field | connection_airtable_create_fieldgrouped: connection_airtable_fields_write, action create |
PATCH /v0/meta/bases/{baseId}/tables/{tableId}/fields/{fieldId}Update field | connection_airtable_update_fieldgrouped: connection_airtable_fields_write, action update |
GET /v0/bases/{baseId}/webhooksList webhooks | connection_airtable_list_webhooksgrouped: connection_airtable_webhooks_read, action list |
POST /v0/bases/{baseId}/webhooksCreate webhook | connection_airtable_create_webhookgrouped: connection_airtable_webhooks_write, action create |
DELETE /v0/bases/{baseId}/webhooks/{webhookId}Delete webhook | connection_airtable_delete_webhookgrouped: connection_airtable_webhooks_delete, action delete |
GET /v0/bases/{baseId}/webhooks/{webhookId}/payloadsList webhook payloads | connection_airtable_list_webhook_payloadsgrouped: connection_airtable_webhooks_read, action list_payloads |
POST /v0/bases/{baseId}/webhooks/{webhookId}/refreshRefresh webhook | connection_airtable_refresh_webhookgrouped: connection_airtable_webhooks_write, action refresh |
POST /v0/bases/{baseId}/webhooks/{webhookId}/enableNotificationsEnable or disable webhook notifications | connection_airtable_set_webhook_notificationsgrouped: connection_airtable_webhooks_write, action set_notifications |
GET /v0/meta/whoamiGet current user (whoami) | connection_airtable_whoamigrouped: connection_airtable_bases_read, action whoami |