A Model Context Protocol (MCP) server for Airtable with full CRUD operations, schema management, webhooks, batch operations, and AI-powered analytics.
Version 3.2.6 | MCP Protocol 2024-11-05
This server provides comprehensive Airtable integration through the Model Context Protocol, enabling natural language interactions with your Airtable data. It includes 33 tools for data operations and 10 AI prompt templates for intelligent analytics.
- Full CRUD Operations — Create, read, update, and delete records with filtering and pagination
- Schema Management — Create and modify tables, fields, and views programmatically
- Batch Operations — Process up to 10 records per operation for improved performance
- Webhook Management — Set up real-time notifications for data changes
- AI Analytics — Predictive analytics, natural language queries, and automated insights
- Multi-Base Support — Discover and work with multiple bases dynamically
- Type Safety — Full TypeScript support with comprehensive type definitions
- Node.js 14 or later
- An Airtable account with a Personal Access Token
- Your Airtable Base ID (optional—can be discovered via the
list_basestool)
npm install -g @rashidazarang/airtable-mcpgit clone https://github.com/rashidazarang/airtable-mcp.git
cd airtable-mcp
npm install-
Personal Access Token: Go to Airtable Account Settings and create a token with these scopes:
data.records:read— Read recordsdata.records:write— Create, update, delete recordsschema.bases:read— View table schemasschema.bases:write— Create and modify tables and fieldswebhook:manage— Manage webhooks (optional)
-
Base ID: Open your Airtable base and copy the ID from the URL:
https://airtable.com/[BASE_ID]/...
Create a .env file in your project directory:
AIRTABLE_TOKEN=your_personal_access_token
AIRTABLE_BASE_ID=your_base_id # Optional in v3.2.5+Note: The Base ID is optional. You can start without one and use the
list_basestool to discover accessible bases, or specify base IDs per tool call.
Add to your Claude Desktop configuration:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"airtable": {
"command": "npx",
"args": ["@rashidazarang/airtable-mcp"],
"env": {
"AIRTABLE_TOKEN": "YOUR_AIRTABLE_TOKEN",
"AIRTABLE_BASE_ID": "YOUR_BASE_ID"
}
}
}
}To start without a base ID (and discover bases dynamically):
{
"mcpServers": {
"airtable": {
"command": "npx",
"args": ["@rashidazarang/airtable-mcp"],
"env": {
"AIRTABLE_TOKEN": "YOUR_AIRTABLE_TOKEN"
}
}
}
}Restart Claude Desktop or your MCP client to load the server.
Once configured, interact with your Airtable data using natural language:
- "List all my accessible Airtable bases"
- "Show me all records in the Projects table"
- "Create a new task with priority 'High' and due date tomorrow"
- "Update the status of task ID rec123 to 'Completed'"
- "Search for records where Status equals 'Active'"
- "Show me the complete schema for this base"
- "Create a new table called 'Tasks' with Name, Priority, and Due Date fields"
- "Add a Status field to the Projects table"
- "Create 5 new records at once in the Tasks table"
- "Update multiple records with new status values"
- "Delete these 3 records in one operation"
- "Create a webhook for my table that notifies https://my-app.com/webhook"
- "List all active webhooks in my base"
import {
AirtableMCPServer,
ListRecordsInput,
AnalyzeDataPrompt
} from '@rashidazarang/airtable-mcp/types';
const server = new AirtableMCPServer();
const params: ListRecordsInput = {
table: 'Tasks',
maxRecords: 10,
filterByFormula: "Status = 'Active'"
};
const records = await server.handleToolCall('list_records', params);| Tool | Description |
|---|---|
list_tables |
Get all tables in your base with schema information |
list_records |
Query records with filtering and pagination |
get_record |
Retrieve a single record by ID |
create_record |
Add new records to any table |
update_record |
Modify existing record fields |
delete_record |
Remove records from a table |
search_records |
Advanced search with Airtable formulas |
| Tool | Description |
|---|---|
list_bases |
List all accessible bases with permissions |
get_base_schema |
Get complete schema for any base |
describe_table |
Get detailed table and field specifications |
list_field_types |
Reference guide for available field types |
get_table_views |
List all views for a table |
| Tool | Description |
|---|---|
create_table |
Create tables with custom field definitions |
update_table |
Modify table names and descriptions |
delete_table |
Remove tables (requires confirmation) |
| Tool | Description |
|---|---|
create_field |
Add fields to existing tables |
update_field |
Modify field properties and options |
delete_field |
Remove fields (requires confirmation) |
| Tool | Description |
|---|---|
batch_create_records |
Create up to 10 records at once |
batch_update_records |
Update up to 10 records simultaneously |
batch_delete_records |
Delete up to 10 records in one operation |
batch_upsert_records |
Update or create records based on key fields |
| Tool | Description |
|---|---|
list_webhooks |
View all configured webhooks |
create_webhook |
Set up real-time notifications |
delete_webhook |
Remove webhook configurations |
get_webhook_payloads |
Retrieve notification history |
refresh_webhook |
Extend webhook expiration |
| Tool | Description |
|---|---|
create_view |
Create views (grid, form, calendar, etc.) |
get_view_metadata |
Get view details including filters |
upload_attachment |
Attach files from URLs |
| Tool | Description |
|---|---|
create_base |
Create new bases with initial structure |
list_collaborators |
View collaborators and permissions |
list_shares |
List shared views and configurations |
Ten AI prompt templates for advanced analytics:
| Prompt | Description |
|---|---|
analyze_data |
Statistical analysis with anomaly detection |
create_report |
Intelligent report generation |
data_insights |
Business intelligence and pattern discovery |
optimize_workflow |
Automation recommendations |
smart_schema_design |
Database optimization suggestions |
data_quality_audit |
Quality assessment and remediation |
predictive_analytics |
Forecasting and trend prediction |
natural_language_query |
Process questions with context awareness |
smart_data_transformation |
AI-assisted data processing |
automation_recommendations |
Workflow optimization with cost-benefit analysis |
{
"mcpServers": {
"airtable": {
"command": "npx",
"args": [
"@smithery/cli",
"run",
"@rashidazarang/airtable-mcp",
"--token", "YOUR_TOKEN",
"--base", "YOUR_BASE_ID"
]
}
}
}{
"mcpServers": {
"airtable": {
"command": "node",
"args": [
"/path/to/airtable-mcp/airtable_simple.js",
"--token", "YOUR_TOKEN",
"--base", "YOUR_BASE_ID"
]
}
}
}npm install
npm run test:types # Type checking
npm run test:ts # Full test suite
npm run build && npm run start:tsexport AIRTABLE_TOKEN=your_token
export AIRTABLE_BASE_ID=your_base_id
node airtable_simple.js &
./test_v1.6.0_comprehensive.shConnection Refused
- Verify the MCP server is running
- Check that port 8010 is available
- Restart your MCP client
Invalid Token
- Verify your Personal Access Token is correct
- Confirm the token has the required scopes
- Check for extra whitespace in credentials
Base Not Found
- Confirm your Base ID is correct
- Verify your token has access to the base
Port Conflicts
lsof -ti:8010 | xargs kill -9airtable-mcp/
├── src/
│ ├── typescript/ # TypeScript implementation (primary)
│ └── javascript/ # JavaScript implementation
├── dist/ # Compiled output
├── docs/ # Documentation
├── tests/ # Test files
├── examples/ # Usage examples
├── types/ # TypeScript definitions
└── bin/ # CLI executables
Contributions are welcome. Please open an issue first to discuss major changes.
MIT License — see LICENSE for details.