communitystdio

Airtable MCP Server

Query and update Airtable bases from Claude Code or Cursor with a single npx command and a personal access token.

Updated: April 15, 2026

Install

npx airtable-mcp-server
~/.claude/settings.json
{
  "mcpServers": {
    "airtable-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "airtable-mcp-server"
      ],
      "env": {
        "AIRTABLE_API_KEY": "patXXX"
      }
    }
  }
}

Capabilities

  • + List bases, tables, and view schemas across your Airtable workspace
  • + Read records with filterByFormula support, sorting, and pagination
  • + Create and update records in any table with typed field payloads
  • + Search across fields using case-insensitive substring matches
  • + Read attachment metadata including URL, size, and content type

Limitations

  • - Requires a personal access token with explicit scopes; legacy API keys are rejected by the API
  • - Rate limited to 5 requests per second per base, so bulk operations need throttling on the client side
  • - Formula evaluation happens server-side at Airtable and cannot be triggered directly through the MCP tool
  • - Attachment uploads require pre-signed URLs; the server only returns metadata for existing attachments

Airtable MCP server setup for Claude Code and Cursor

Quick answer: The Airtable MCP server wraps the Airtable REST API as a set of tools Claude Code or Cursor can call. Install with one npx command, drop in a personal access token, and the editor can list bases, read records, run filters, and update rows. Setup runs about 4 minutes, tested on airtable-mcp-server@0.3.2 on April 15, 2026.

Most Airtable users end up copying rows into ChatGPT or Claude to ask questions about them. The MCP server removes that step. When you ask Claude for a summary of the Orders table, it fetches the rows itself, reads the JSON, and writes the summary without ever showing you a spreadsheet. For teams that run half their operations in Airtable bases, that loop is the whole reason to install it.

This guide walks through install, config for both editors, prompt patterns that work, and the rate limits and auth quirks you will hit in the first week.

What this server does

The server speaks MCP over stdio and forwards every call to Airtable's REST API using the official client. There are about 10 tools exposed, split across three groups:

  • Schema: list_bases, list_tables, describe_table
  • Records: list_records, get_record, create_records, update_records, delete_records
  • Search: search_records across all text fields in a table

Every tool call carries the personal access token in the Authorization header. The server holds the token in memory for the life of the subprocess, does not log it, and does not write it to disk. If you rotate the token, restart the server and the new value is picked up.

The server does not implement a local cache. Every list_records call is a fresh round trip. That is fine for tables under a few thousand rows but adds up on bigger bases - budget 200 to 400 ms per page of 100 records.

Installing Airtable MCP

The package is on npm as airtable-mcp-server. The npx -y prefix fetches it on first launch and caches the binary for subsequent runs. The cold pull is around 4 MB and finishes in 2 to 3 seconds.

Before touching any config, generate a personal access token:

  1. Open https://airtable.com/create/tokens and click Create new token.
  2. Give it a name like claude-mcp-dev and pick the scopes data.records:read, data.records:write, and schema.bases:read.
  3. Add the specific bases you want Claude to reach. Do not check All current and future bases unless you trust every prompt.
  4. Copy the token - it starts with pat and shows only once.

Keep the token out of any file you commit. The rest of this guide assumes the value lives in a shell env var called AIRTABLE_API_KEY.

Configuring for Claude Code

Claude Code reads MCP servers from ~/.claude/mcp.json or a per-project .mcp.json. Add an airtable entry that spawns the server with the token in its env:

{
  "mcpServers": {
    "airtable": {
      "command": "npx",
      "args": ["-y", "airtable-mcp-server"],
      "env": { "AIRTABLE_API_KEY": "patXXX" }
    }
  }
}

Restart Claude Code, then run /mcp in a session to confirm Airtable is attached. Call list_bases once as a smoke test. If you see your workspace bases come back with IDs, the token has the right scope.

For team projects, commit a placeholder version of .mcp.json with $AIRTABLE_API_KEY inside the env value and let each developer provide the real token via their shell profile. Claude Code expands env vars when it spawns the subprocess.

Configuring for Cursor

Cursor uses the same MCP spec and reads from ~/.cursor/mcp.json. The config is identical:

{
  "mcpServers": {
    "airtable": {
      "command": "npx",
      "args": ["-y", "airtable-mcp-server"],
      "env": { "AIRTABLE_API_KEY": "patXXX" }
    }
  }
}

Open Cursor settings, navigate to the MCP tab, and toggle the server on. Cursor spawns the subprocess lazily on the first tool call. Expect 2 to 3 seconds of cold start and 200 to 500 ms per subsequent tool call, depending on how many records you read.

Example prompts and workflows

A few prompts that work reliably once the server is attached:

  • "List all bases in my workspace and summarize what each one tracks."
  • "Read the Customers table and show every row where plan is Enterprise and renewal_date is in the next 30 days."
  • "Create a new row in the Feedback table with source=email, priority=high, and the summary I paste below."
  • "Find every record in Leads that mentions acme.com in any field and show the matching fields."
  • "Update the Status field on record recXXX to Closed and log the change note in Activity."

The model will chain calls on its own. A read-then-summarize flow usually runs list_tables, then describe_table, then one or more list_records calls with filter formulas. If your table is large, tell the model the exact view name up front. Airtable views are pre-filtered and pre-sorted, so asking for view This week cuts round trips from 4 down to 1.

One caveat: the model sometimes generates overly broad filter formulas. If you see a single call trying to pull 10,000 rows, stop it and rephrase with a narrower date range or status.

Troubleshooting

Tool call returns 401. The token is wrong or has been revoked. Regenerate at https://airtable.com/create/tokens and restart the MCP server (/mcp restart airtable in Claude Code).

Tool call returns 403. The token is valid but the requested base is not in the token scope. Open the token settings and add the base, then restart the server.

Tool call returns 422. A field name or ID does not exist, or the payload type mismatches the field type. Run describe_table first to see the exact field names and their types. Airtable is strict: a single-select field rejects values that are not in the options list.

Rate limit errors. The API caps at 5 requests per second per base. The server does not queue on your behalf. If Claude runs a bulk update across 500 records, expect some calls to fail with 429. Batch updates (update_records supports up to 10 rows per call) reduce the hit count.

Server fails with ENOENT. npx is not on PATH in the env the editor inherits. On macOS, launch Claude Code or Cursor from a terminal so it inherits your shell env, or put the absolute path to npx in the command field.

Alternatives

A few options if the Airtable server does not fit your setup:

  • nocodb-mcp targets NocoDB, the open-source Airtable clone, with a similar tool surface and no seat-based billing.
  • notion-mcp handles databases that look like Airtable but live inside Notion pages.
  • google-sheets-mcp is a lighter option if the data is really just a spreadsheet and does not need Airtable's typed fields or views.

For one-off exports, the Airtable web API is straightforward to call from a script. The MCP server pays off when Claude needs to read and write in the same session without you switching to the browser.

The Airtable MCP server is the right default for any workflow already rooted in Airtable bases. Four minutes of setup replaces a week of manual copy-paste between your editor and the Airtable UI. Start with a read-only token scoped to a single base, then widen scopes after you trust the prompt patterns in your team.

Guides

Frequently asked questions

Do I need an Enterprise plan to use the Airtable MCP server?

No. Any paid or free plan that allows personal access tokens works. The server calls the standard REST API, which is available on every plan. Free plans do cap at 1,200 records per base though, so test with a smaller dataset first.

Why does the server reject my legacy API key?

Airtable deprecated the old account-wide API keys in early 2024. The MCP server only accepts personal access tokens that start with `pat`. Generate one at airtable.com/create/tokens with scopes `data.records:read` and `data.records:write` and use that value instead.

Can Claude edit my Airtable schema or create new tables?

Not through this server. The current tools cover record-level operations only. To add or remove fields, use the Airtable metadata API directly or the web UI. A schema-editing tool may arrive in a later release but is not present in v0.3.x.

How does the server handle attachments?

It returns attachment metadata including file URL, size, and content type. It does not upload or download the binary content. To push a new attachment, upload the file to a storage bucket first and pass the public URL in the record payload.

What happens when I hit the 5-request-per-second rate limit?

The API returns a 429 status and the MCP tool surfaces the error back to Claude. The server does not retry automatically. For bulk jobs, use `update_records` or `create_records` with up to 10 rows per call to cut the request count by 10x.

Is the personal access token logged anywhere on disk?

The server holds the token in process memory and does not write it to disk. It also does not appear in stdout or tool-call traces that get sent back to Claude. Rotate tokens on a 90-day cadence as a baseline hygiene practice.