← All integrations

Airtable

Let an agent work your bases without the run of your account. It reads schemas and searches records, creates, updates and upserts them and comments on them, and deleting a record or writing in bulk can wait for a person.

Airtablesecret · AIRTABLE
host
api.airtable.com
connect
API key, per user
  • Create record

    airtable-create-record

  • Create records

    airtable-create-records

  • Update record

    airtable-update-record

  • Upsert records

    airtable-upsert-records

writes are off until switched on

Reads and writes in Airtable. Writes are off until you switch them on.

Each one is a named operation from the pack. Reads change nothing.

Writes

  • Create record

    read back

    airtable-create-record

    Create one record with the fields you give. Returns the new record with its id.

  • Create records

    read back

    airtable-create-records

    Create up to 10 records in one call; Airtable refuses more. Counts one mutation per record.

  • Update record

    acknowledged

    airtable-update-record

    Change the fields you give on one record; fields you leave out stay as they are. Returns the record.

  • Upsert records

    acknowledged

    airtable-upsert-records

    Update or create up to 10 records, matched on one to three fields that identify a record (for example Email). No match creates a record, one match updates it, and more than one match fails the call. Counts one mutation per record. Returns the records and the ids Airtable created and updated.

  • Delete record

    read back

    airtable-delete-record

    Delete one record, with its comments.

  • Add comment

    read back

    airtable-add-comment

    Add a comment to one record, as the token's user, or reply to a comment with parent_comment_id. Everyone with access to the base can see it.

  • Update comment

    read back

    airtable-update-comment

    Replace the text of one comment. Airtable lets a token edit only comments its own user wrote.

Reads

  • Get current user

    airtable-get-current-user

    Get the Airtable user the token acts as: the user id, and the email address when the token has the user.email:read scope. Use it to check whose account a call reaches.

  • List bases

    airtable-list-bases

    List the bases the token can reach: id, name and your permission level on each. Airtable returns up to 1000 bases a page; when the response has an offset, pass it as offset for the next page.

  • Get base schema

    airtable-get-base-schema

    Get a base's tables: each table's id, name and primary field, its fields (id, name, type, options) and its views (id, name, type). Use it to learn the field names and ids before reading or writing records.

  • List records

    airtable-list-records

    List or search a table's records: id, createdTime and fields. 10 records a page; when the response has an offset, pass it as offset for the next page with the same filter, view and sort. Filter with an Airtable formula, for example {Status}='Open' or SEARCH('acme', LOWER({Name})). Empty cells are left out of fields.

  • Get record

    airtable-get-record

    Get one record by id: id, createdTime and every non-empty field, keyed by field name.

  • List comments

    airtable-list-comments

    List the comments on one record, newest first: id, author, text, createdTime and lastUpdatedTime. 20 a page; when the response has an offset, pass it as offset for the next page.

How do users connect? Each one brings their own Airtable.

  1. 1.Call for the userYour server invokes the action for the signed-in user. Without a Airtable connection, the SDK throws EndUserNotConnectedError with a connect link.
  2. 2.The user pastes a keyThe link opens a form that shows where in Airtable's settings to create the key. The link lasts 10 minutes and works once.
  3. 3.Anlyon checks itThe key is checked with Airtable before it is kept, and bound to api.airtable.com. It is never shown back.
  4. 4.Your server confirmsYour server confirms the connection for the user who is signed in, and the call goes through.

Guardrails. Suggested limits and approvals, for you to review.

Suggested limits

  • 200 records created a day
  • 200 records created in bulk a day
  • 500 records updated a day
  • 200 records upserted a day
  • 20 records deleted a day
  • 200 comments added a day
  • 100 comments edited a day

Suggested approvals

  • A person approves deleting a record
  • A person approves creating records in bulk
  • A person approves upserting records

What the key must allow

  • A personal access token you create
  • data.records:read and write, data.recordComments:read and write, schema.bases:read
  • Only the bases you add to the token

Good to know

  • A base that is not added to the token cannot be reached.
  • Airtable has no idempotency key for a create. Anlyon sends it once and never repeats it.

For your own account

  1. 1.In Airtable, open the builder hub, Personal access tokens, and create a token with those scopes.
  2. 2.Add the bases your agent should reach, and no others.
  3. 3.In Anlyon, open Actions, then Integrations, choose Airtable and paste the token.
  4. 4.Anlyon checks the token with Airtable before storing it. It becomes a secret named AIRTABLE, bound to api.airtable.com.

Airtable in your code. For one of your users, or for your own account.

Act for one of your users from your server, or connect your company's own Airtable with the CLI.

airtable.ts
import { Client, EndUserNotConnectedError } from "@anlyonhq/sdk";const anlyon = new Client({ apiKey: process.env.ANLYON_API_KEY! });try {  const { data } = await anlyon    .forUser(session.userId)    .actions.invoke("airtable-create-record", {      base_id: "appA1b2C3d4E5f6G7",      table: "Leads",      fields: {        Name: "Acme",        Stage: "Contacted"      }    });  return { status: "done", grade: data.grade };} catch (error) {  if (error instanceof EndUserNotConnectedError) {    // The user connects their own Airtable, then you call again.    return { status: "connect_required", url: error.connectUrl };  }  throw error;}

Let your agent act for your users, safely.

A few lines of server code, then send a user a connect link. Nothing to host.

$ claude mcp add --transport http anlyon https://api.anlyon.com/mcp