AM1010101/airtable-mcp-sse
If you are the rightful owner of airtable-mcp-sse and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
A Model Context Protocol server that provides read and write access to Airtable databases, enabling LLMs to inspect database schemas and manage records.
list_records
Lists records from a specified Airtable table
search_records
Search for records containing specific text
list_bases
Lists all accessible Airtable bases
list_tables
Lists all tables in a specific base
describe_table
Gets detailed information about a specific table
get_record
Gets a specific record by ID
create_record
Creates a new record in a table
update_records
Updates one or more records in a table
delete_records
Deletes one or more records from a table
create_table
Creates a new table in a base
update_table
Updates a table's name or description
create_field
Creates a new field in a table
update_field
Updates a field's name or description
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
Usage
-
Start the server:
npm start
The server will start on port 8080.
-
Configure your client: To use this server with a client like the Claude Desktop app, add the following configuration to the "mcpServers" section of your client's configuration file. The API key should be provided in the
Authorization
header as a Bearer token.{ "mcpServers": { "airtable": { "url": "http://localhost:8080/sse", "headers": { "Authorization": "Bearer pat123.abc123" } } } }
Replace
pat123.abc123
with your Airtable personal access token. Your token should have at leastschema.bases:read
anddata.records:read
, and optionally the corresponding write permissions.
Components
Tools
-
list_records
- Lists records from a specified Airtable table
- Input parameters:
baseId
(string, required): The ID of the Airtable basetableId
(string, required): The ID of the table to querymaxRecords
(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 basetableId
(string, required): The ID of the table to querysearchTerm
(string, required): Text to search for in recordsfieldIds
(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
-
describe_base
- Gets a complete schema for a specific base, including all its tables
- Input parameters:
baseId
(string, required): The ID of the Airtable basedetailLevel
(string, optional): The amount of detail to get about the tables (tableIdentifiersOnly
,identifiersOnly
, orfull
)
- Returns the base information along with a list of all its tables and their schemas to the specified detail level.
-
describe_all_bases
- Gets a complete schema for all accessible bases and their tables
- Input parameters:
detailLevel
(string, optional): The amount of detail to get about the tables (tableIdentifiersOnly
,identifiersOnly
, orfull
)
- Returns a list of all bases, each with a list of all its tables and their schemas to the specified detail level.
-
list_tables
- Lists all tables in a specific base
- Input parameters:
baseId
(string, required): The ID of the Airtable basedetailLevel
(string, optional): The amount of detail to get about the tables (tableIdentifiersOnly
,identifiersOnly
, orfull
)
- 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 basetableId
(string, required): The ID of the table to describedetailLevel
(string, optional): The amount of detail to get about the table (tableIdentifiersOnly
,identifiersOnly
, orfull
)
- 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 basetableId
(string, required): The ID of the tablerecordId
(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 basetableId
(string, required): The ID of the tablefields
(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 basetableId
(string, required): The ID of the tablerecords
(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 basetableId
(string, required): The ID of the tablerecordIds
(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 basename
(string, required): Name of the new tabledescription
(string, optional): Description of the tablefields
(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 basetableId
(string, required): The ID of the tablename
(string, optional): New name for the tabledescription
(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 basetableId
(string, required): The ID of the tablename
(string, required): Name of the new fieldtype
(string, required): Type of the fielddescription
(string, optional): Description of the fieldoptions
(object, optional): Field-specific options
-
update_field
- Updates a field's name or description
- Input parameters:
baseId
(string, required): The ID of the Airtable basetableId
(string, required): The ID of the tablefieldId
(string, required): The ID of the fieldname
(string, optional): New name for the fielddescription
(string, optional): New description for the field
Resources
The server provides schema information for Airtable bases and tables:
- Table Schemas (
airtable://<baseId>/<tableId>/schema
)- JSON schema information for each table
- Includes:
- Base id and table id
- Table name and description
- Primary field ID
- Field definitions (ID, name, type, description, options)
- View definitions (ID, name, type)
- Automatically discovered from Airtable's metadata API
Hosting with Docker
To host this server using Docker, follow these steps:
-
Build the Docker image:
docker build -t airtable-mcp-server .
-
Run the Docker container:
docker run -p 8080:8080 airtable-mcp-server
This will start the server and map port 8080 from the container to port 8080 on your host machine. You can then access the server at
http://localhost:8080
.For production use, you should run this behind a reverse proxy that provides HTTPS.
Contributing
Pull requests are welcomed on GitHub! To get started:
- Install Git and Node.js
- Clone the repository
- Install dependencies with
npm install
- Run
npm run test
to run tests - Build with
npm run build
- You can use
npm run build:watch
to automatically build after editing . 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:
- Use
npm version <major | minor | patch>
to bump the version - Run
git push --follow-tags
to push with tags - Wait for GitHub Actions to publish to the NPM registry.