airtable-mcp-server
๐๏ธ๐ค Airtable Model Context Protocol Server, for allowing AI systems to interact with your Airtable bases TypeScript-based implementation.
Documentation
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-serverThis starts a stateless HTTP server at `http://localhost:3000/mcp`.
> [!WARNING]
> The HTTP transport has no built-in authentication, and binding to
> localhost or a private network is not a security boundary against
> browsers: a malicious website can use DNS rebinding
> to make a visitor's browser send requests to `http://localhost:3000/mcp`
> and invoke tools โ including reading, writing and deleting records โ
> using this server's Airtable token.
>
> Only run HTTP mode where untrusted callers (including browsers on the
> same machine or network) cannot reach `/mcp` without authenticating.
> In practice that means putting it behind a reverse proxy or gateway
> that requires a credential a browser won't attach cross-origin, such
> as an `Authorization` header.
>
> If you just want to use this server with an MCP client on the same
> machine, use the default stdio transport instead โ it doesn't open a
> port at all.
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`
Releases
Versions follow the semantic versioning spec.
To release:
1. Use `npm version ` 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.
Frequently asked questions
What is airtable-mcp-server?
airtable-mcp-server is ๐๏ธ๐ค Airtable Model Context Protocol Server, for allowing AI systems to interact with your Airtable bases TypeScript-based implementation.
How do I install airtable-mcp-server?
Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.
Is airtable-mcp-server open source?
Yes โ it is hosted on GitHub at https://github.com/domdomegg/airtable-mcp-server and has 318 stars.
Related MCP tools
Add Obsidian integrations like semantic search and custom Templater prompts to Claude or any MCP client. TypeScript-based implementation.
Model Context Protocol (MCP) Server for Graphlit Platform TypeScript-based implementation.
A Model Context Protocol (MCP) server implementation for remote memory bank management, inspired by Cline Memory Bank. TypeScript-based implementation.
MCP server for Apple Developer Documentation - Search iOS/macOS/SwiftUI/UIKit docs, WWDC videos, Swift/Objective-C APIs & code examples in Claude, Cursor & A...
MCP server that integrates the LINE Messaging API to connect an AI Agent to the LINE Official Account. TypeScript-based implementation.
A collection of Model Context Protocol servers for popular security tools like SQLMap, FFUF, NMAP, Masscan and more. TypeScript-based implementation.
Run your own MCP server? See who uses it and what to fix.
Measure it with TrackMCP