PluginBench
MCP Server
Active
MIT

Airtable MCP Server

io.github.domdomegg/airtable-mcp-server

Give AI assistants read/write access to Airtable bases, tables, records, and comments.

What is the Airtable MCP server?

Airtable MCP server is a Model Context Protocol server that gives LLMs read and write access to Airtable databases, including schemas, tables, records, and comments. It lets AI assistants like Claude Desktop, Cursor, and Cline inspect base structures and perform CRUD operations directly against Airtable via its API.

The Airtable MCP server connects LLM-based tools (Claude, Cursor, Cline, VS Code, etc.) to Airtable via the Model Context Protocol. It exposes tools to list bases and tables, inspect schemas, and read, create, update, and delete records and fields, as well as manage record comments. It can run as a local stdio server (via npx or Docker) or as a stateless HTTP server for remote MCP clients, and requires an Airtable personal access token with appropriate scopes.

How to install Airtable

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Environment / auth
  • AIRTABLE_API_KEY
    required
    secret

    Airtable personal access token (e.g., pat123.abc123). Create at https://airtable.com/create/tokens/new with scopes: schema.bases:read, data.records:read, and optionally schema.bases:write and data.records:write.

Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "airtable-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "airtable-mcp-server"
      ],
      "env": {
        "AIRTABLE_API_KEY": "<YOUR_AIRTABLE_API_KEY>"
      }
    }
  }
}
Cursor
~/.cursor/mcp.json
{
  "mcpServers": {
    "airtable-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "airtable-mcp-server"
      ],
      "env": {
        "AIRTABLE_API_KEY": "<YOUR_AIRTABLE_API_KEY>"
      }
    }
  }
}
Windsurf
~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "airtable-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "airtable-mcp-server"
      ],
      "env": {
        "AIRTABLE_API_KEY": "<YOUR_AIRTABLE_API_KEY>"
      }
    }
  }
}
VS Code
.vscode/mcp.json
{
  "servers": {
    "airtable-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "airtable-mcp-server"
      ],
      "env": {
        "AIRTABLE_API_KEY": "<YOUR_AIRTABLE_API_KEY>"
      }
    }
  }
}
Claude Code
claude mcp add airtable-mcp-server --env AIRTABLE_API_KEY=<YOUR_AIRTABLE_API_KEY> -- npx -y airtable-mcp-server

Tools & capabilities

Tools this server exposes to the agent.

  • list_recordsLists records from a specified Airtable table, with optional max records and filter formula.
  • search_recordsSearch for records containing specific text, optionally restricted to specific field IDs.
  • list_basesLists all accessible Airtable bases, returning base ID, name, and permission level.
  • list_tablesLists all tables in a specific base, with configurable detail level (identifiers only or full).
  • describe_tableGets detailed information about a specific table, similar to list_tables but for one table.
  • get_recordGets a specific record by ID from a table.
  • create_recordCreates a new record in a table with given fields.
  • update_recordsUpdates one or more records in a table given record IDs and fields.
  • delete_recordsDeletes one or more records from a table by record IDs.
  • create_tableCreates a new table in a base with a name, description, and field definitions.
  • update_tableUpdates a table's name or description.
  • create_fieldCreates a new field in a table with a name, type, description, and options.
  • update_fieldUpdates a field's name or description.
  • create_commentCreates a comment on a record, optionally as a threaded reply.
  • list_commentsLists comments on a record with pagination, including author, text, timestamps, reactions, and mentions.

Use cases

  • Let an AI assistant explore an Airtable base's schema before writing automation scripts
  • Query and search table records using natural language through an LLM
  • Bulk create, update, or delete Airtable records from a chat interface
  • Programmatically manage table and field structure (create/update tables and fields)
  • Read and post comments on Airtable records for collaborative workflows

Airtable MCP server FAQ

What does the Airtable MCP server do?

It lets AI assistants (like Claude or Cursor) read and write Airtable data and schemas through the Model Context Protocol, including listing bases/tables, reading and searching records, and creating/updating/deleting records, tables, fields, and comments.

Is the Airtable MCP server free?

Yes, it's an open-source project (available via npm, Docker/OCI, and mcpb bundle) and free to use; you just need your own Airtable account and personal access token.

How do I install it in Cursor or Claude Desktop?

Use the install-mcp generator link to produce the correct config for your client, or run it via `npx -y airtable-mcp-server`, add it to your MCP client's config with the AIRTABLE_API_KEY environment variable set, then reload the client.

What authentication is required?

You need an Airtable personal access token (looks like `pat123.abc123`) with at least `schema.bases:read` and `data.records:read` scopes, plus optional write and comment scopes depending on which tools you want to use, and access granted to the relevant bases.

Can it run over HTTP for remote clients?

Yes, setting MCP_TRANSPORT=http and PORT starts a stateless HTTP server at /mcp, but it has no built-in authentication so it should only be run behind a reverse proxy or in a secured environment.

Can it modify the database structure, not just records?

Yes, it supports creating and updating tables and fields (create_table, update_table, create_field, update_field) in addition to record-level read/write operations.

README (reference)

Source of truth, from the repository.

airtable-mcp-server

A Model Context Protocol server that provides read and write access to Airtable databases. This server enables LLMs to inspect database schemas, then read and write records.

https://github.com/user-attachments/assets/c8285e76-d0ed-4018-94c7-20535db6c944

Installation

Follow the instructions on install-mcp, which generates the right config for your MCP client (Claude Code, Claude Desktop, Cursor, Cline, VS Code, and more).

You'll need an Airtable personal access token — create one here with scopes schema.bases:read and data.records:read (and optionally schema.bases:write, data.records:write, data.recordComments:read, data.recordComments:write), and access to the bases you want to use. It looks something like pat123.abc123 (but longer). Set it as AIRTABLE_API_KEY (replacing the placeholder in the generated config).

Components

Tools

  • list_records

    • Lists records from a specified Airtable table
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table to query
      • maxRecords (number, optional): Maximum number of records to return. Defaults to 100.
      • filterByFormula (string, optional): Airtable formula to filter records
  • search_records

    • Search for records containing specific text
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table to query
      • searchTerm (string, required): Text to search for in records
      • fieldIds (array, optional): Specific field IDs to search in. If not provided, searches all text-based fields.
      • maxRecords (number, optional): Maximum number of records to return. Defaults to 100.
  • list_bases

    • Lists all accessible Airtable bases
    • No input parameters required
    • Returns base ID, name, and permission level
  • list_tables

    • Lists all tables in a specific base
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • detailLevel (string, optional): The amount of detail to get about the tables (tableIdentifiersOnly, identifiersOnly, or full)
    • Returns table ID, name, description, fields, and views (to the given detailLevel)
  • describe_table

    • Gets detailed information about a specific table
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table to describe
      • detailLevel (string, optional): The amount of detail to get about the table (tableIdentifiersOnly, identifiersOnly, or full)
    • Returns the same format as list_tables but for a single table
    • Useful for getting details about a specific table without fetching information about all tables in the base
  • get_record

    • Gets a specific record by ID
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table
      • recordId (string, required): The ID of the record to retrieve
  • create_record

    • Creates a new record in a table
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table
      • fields (object, required): The fields and values for the new record
  • update_records

    • Updates one or more records in a table
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table
      • records (array, required): Array of objects containing record ID and fields to update
  • delete_records

    • Deletes one or more records from a table
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table
      • recordIds (array, required): Array of record IDs to delete
  • create_table

    • Creates a new table in a base
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • name (string, required): Name of the new table
      • description (string, optional): Description of the table
      • fields (array, required): Array of field definitions (name, type, description, options)
  • update_table

    • Updates a table's name or description
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table
      • name (string, optional): New name for the table
      • description (string, optional): New description for the table
  • create_field

    • Creates a new field in a table
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table
      • name (string, required): Name of the new field
      • type (string, required): Type of the field
      • description (string, optional): Description of the field
      • options (object, optional): Field-specific options
  • update_field

    • Updates a field's name or description
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table
      • fieldId (string, required): The ID of the field
      • name (string, optional): New name for the field
      • description (string, optional): New description for the field
  • create_comment

    • Creates a comment on a record
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table
      • recordId (string, required): The ID of the record
      • text (string, required): The comment text
      • parentCommentId (string, optional): Parent comment ID for threaded replies
    • Returns the created comment with ID, author, creation time, and text
  • list_comments

    • Lists comments on a record
    • Input parameters:
      • baseId (string, required): The ID of the Airtable base
      • tableId (string, required): The ID of the table
      • recordId (string, required): The ID of the record
      • pageSize (number, optional): Number of comments to return (max 100, default 100)
      • offset (string, optional): Pagination offset for retrieving additional comments
    • Returns comments array with author, text, timestamps, reactions, and mentions
    • Comments are returned from newest to oldest

HTTP Transport

The server can also run in HTTP mode for use with remote MCP clients:

MCP_TRANSPORT=http PORT=3000 npx airtable-mcp-server

This starts a stateless HTTP server at http://localhost:3000/mcp. Note: HTTP transport has no built-in authentication - only use behind a reverse proxy or in a secured environment.

Contributing

Pull requests are welcomed on GitHub! To get started:

  1. Install Git and Node.js
  2. Clone the repository
  3. Install dependencies with npm install
  4. Run npm run test to run tests
  5. Build with npm run build
  • You can use npm run build:watch to automatically build after editing src/index.ts. This means you can hit save, reload Claude Desktop (with Ctrl/Cmd+R), and the changes apply.

Releases

Versions follow the semantic versioning spec.

To release:

  1. Use npm version <major | minor | patch> to bump the version
  2. Run git push --follow-tags to push with tags
  3. Wait for GitHub Actions to publish to the NPM registry.

Related MCP servers

Lets Claude control your computer via screenshots, mouse, and keyboard automation.

318
TypeScript
MIT
View repository →

Gmail

Active

Allow AI systems to read, send, archive, and manage emails via Gmail.

7
TypeScript
View repository →

Fetch content from the web, cleaned up nicely for LLMs (using Defuddle).

6
TypeScript
MIT
View repository →

Execute bash commands with background job support.

6
TypeScript
View repository →

Allow AI systems to list, search, upload, download, and manage files and folders in Google Drive.

4
TypeScript
View repository →

Get the current UTC time in RFC 3339 format.

4
Python
MIT
View repository →