@mcpengine/airtable

Complete Airtable MCP Server providing full API integration for bases, tables, records, fields, views, webhooks, automations, and comments.

Features

  • Bases: List and get base information
  • Tables: List tables, get table schema with all fields and views
  • Records: Full CRUD operations with filtering, sorting, and pagination
  • Fields: Access field definitions and types (all 34 field types supported)
  • Views: List and access views (grid, form, calendar, gallery, kanban, timeline, gantt)
  • Webhooks: Create, list, refresh, and delete webhooks
  • Comments: Full comment management on records
  • Rate Limiting: Automatic retry with exponential backoff (5 req/sec per base)
  • Pagination: Offset-based for records, cursor-based for metadata
  • Batch Operations: Create/update/delete up to 10 records per request

Installation

npm install @mcpengine/airtable

Configuration

Environment Variables

Create a .env file:

AIRTABLE_API_KEY=your_api_key_here

Get your API key from: https://airtable.com/create/tokens

MCP Settings

Add to your MCP settings file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "airtable": {
      "command": "node",
      "args": ["/path/to/@mcpengine/airtable/dist/main.js"],
      "env": {
        "AIRTABLE_API_KEY": "your_api_key_here"
      }
    }
  }
}

Usage

List Bases

// Returns all bases accessible with the API key
airtable_list_bases({ offset?: string })

List Tables

// Get all tables in a base with schema
airtable_list_tables({ baseId: "appXXXXXXXXXXXXXX" })

List Records

// List records with filtering, sorting, and pagination
airtable_list_records({
  baseId: "appXXXXXXXXXXXXXX",
  tableIdOrName: "tblXXXXXXXXXXXXXX" || "Table Name",
  fields?: ["Field1", "Field2"],
  filterByFormula?: "{Status} = 'Done'",
  sort?: [{ field: "Name", direction: "asc" }],
  maxRecords?: 100,
  pageSize?: 100,
  view?: "Grid view",
  offset?: "itrXXXXXXXXXXXXXX/recXXXXXXXXXXXXXX"
})

Create Records

// Create up to 10 records at once
airtable_create_records({
  baseId: "appXXXXXXXXXXXXXX",
  tableIdOrName: "tblXXXXXXXXXXXXXX",
  records: [
    { fields: { Name: "John Doe", Email: "john@example.com" } },
    { fields: { Name: "Jane Smith", Email: "jane@example.com" } }
  ],
  typecast?: true  // Auto-convert types
})

Update Records

// Update up to 10 records at once
airtable_update_records({
  baseId: "appXXXXXXXXXXXXXX",
  tableIdOrName: "tblXXXXXXXXXXXXXX",
  records: [
    { id: "recXXXXXXXXXXXXXX", fields: { Status: "Complete" } }
  ],
  typecast?: true
})

Delete Records

// Delete up to 10 records at once
airtable_delete_records({
  baseId: "appXXXXXXXXXXXXXX",
  tableIdOrName: "tblXXXXXXXXXXXXXX",
  recordIds: ["recXXXXXXXXXXXXXX", "recYYYYYYYYYYYYYY"]
})

Webhooks

// Create a webhook
airtable_create_webhook({
  baseId: "appXXXXXXXXXXXXXX",
  notificationUrl: "https://your-server.com/webhook",
  specification: {
    options: {
      filters: {
        dataTypes: ["tableData"],
        recordChangeScope: "tblXXXXXXXXXXXXXX"
      }
    }
  }
})

// Refresh webhook (extends expiration)
airtable_refresh_webhook({
  baseId: "appXXXXXXXXXXXXXX",
  webhookId: "achXXXXXXXXXXXXXX"
})

Comments

// Create a comment on a record
airtable_create_comment({
  baseId: "appXXXXXXXXXXXXXX",
  tableIdOrName: "tblXXXXXXXXXXXXXX",
  recordId: "recXXXXXXXXXXXXXX",
  text: "This is a comment"
})

Supported Field Types

All 34 Airtable field types are fully supported:

  • Text: singleLineText, email, url, multilineText, richText, phoneNumber
  • Number: number, percent, currency, rating, duration, autoNumber
  • Select: singleSelect, multipleSelects
  • Date: date, dateTime, createdTime, lastModifiedTime
  • Attachment: multipleAttachments
  • Link: multipleRecordLinks
  • User: singleCollaborator, multipleCollaborators, createdBy, lastModifiedBy
  • Computed: formula, rollup, count, lookup, multipleLookupValues
  • Other: checkbox, barcode, button, externalSyncSource, aiText

API Limits

  • Rate Limit: 5 requests per second per base
  • Batch Create/Update: Max 10 records per request
  • Batch Delete: Max 10 record IDs per request
  • Page Size: Max 100 records per page

Rate limiting is handled automatically with exponential backoff.

Development

# Install dependencies
npm install

# Type check
npm run typecheck

# Build
npm run build

# Run
npm start

Architecture

src/
├── types/index.ts       # All Airtable API types (bases, tables, records, fields, etc.)
├── clients/airtable.ts  # API client with rate limiting and pagination
├── server.ts            # MCP server with lazy-loaded tools
└── main.ts              # Entry point with dual transport support

License

MIT

Resources