GitHub - domdomegg/airtable-mcp-server: 🗂️🤖 Airtable Model Context Protocol Server, for allowing AI systems to interact with your Airtable bases (original) (raw)
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.
airtable-mcp-server-demo.mp4
Usage
To use this server with the Claude Desktop app, add the following configuration to the "mcpServers" section of your claude_desktop_config.json
:
{ "mcpServers": { "airtable": { "command": "npx", "args": [ "-y", "airtable-mcp-server" ], "env": { "AIRTABLE_API_KEY": "pat123.abc123" } } } }
Replace pat123.abc123
with your Airtable personal access token. Your token should have at least schema.bases:read
and data.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 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
, 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 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
, 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 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
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
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 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:
- 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.