Airtable MCP Server
Enables AI assistants to retrieve records from Airtable bases by providing record ID, base ID, and table name.
README
Airtable MCP Server
A Model Context Protocol (MCP) server for Airtable integration that allows AI assistants to retrieve records from Airtable bases.
๐ Quick Start
Prerequisites
- Node.js 18+
- Airtable Personal Access Token
- Airtable base with accessible tables
Installation
-
Clone and setup the project:
git clone <repository-url> cd airtable-mcp-server npm install -
Get your Airtable Personal Access Token:
- Visit https://airtable.com/create/tokens
- Create a new token with read permissions for your target bases
- Copy the token (format:
patXXXXXXXXXXXXXX.xxxxxxxxxx...)
-
Configure environment:
cp .env.example .env # Edit .env and set your AIRTABLE_PERSONAL_ACCESS_TOKEN -
Build and test:
npm run build npm start
๐ง Usage
The server provides one tool: getAirtableRecord
Tool Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
recordId |
string | Yes | Airtable record ID (format: recXXXXXXXXXXXXXX) |
baseId |
string | Yes | Airtable base ID (format: appXXXXXXXXXXXXXX) |
tableName |
string | Yes | Name of the table containing the record |
Example Usage
Input:
{
"recordId": "recABC123DEF456",
"baseId": "appXYZ789ABC123",
"tableName": "Artists"
}
Output:
{
"content": [
{
"type": "text",
"text": "{\"id\":\"recABC123DEF456\",\"fields\":{\"Name\":\"Vincent van Gogh\",\"Bio\":\"Dutch painter...\",\"Genre\":[\"Post-Impressionism\"]},\"createdTime\":\"2024-01-15T10:30:00.000Z\"}"
}
]
}
๐ MCP Client Integration
Claude Desktop
Add to your ~/.claude/mcp.json (see examples/claude-desktop.json):
{
"mcpServers": {
"airtable": {
"command": "node",
"args": ["/path/to/airtable-mcp-server/dist/index.js"],
"env": {
"AIRTABLE_PERSONAL_ACCESS_TOKEN": "your_token_here"
}
}
}
}
Cursor IDE
Add to your .cursor/mcp.json (see examples/cursor-ide.json):
{
"mcpServers": {
"airtable": {
"command": "node",
"args": ["./dist/index.js"],
"env": {
"AIRTABLE_PERSONAL_ACCESS_TOKEN": "your_token_here"
}
}
}
}
VS Code
Add to your MCP configuration (see examples/vscode.json):
{
"mcpServers": {
"airtable": {
"command": "node",
"args": ["./dist/index.js"],
"env": {
"AIRTABLE_PERSONAL_ACCESS_TOKEN": "your_token_here"
},
"transport": "stdio"
}
}
}
Global Installation (NPM)
npm install -g airtable-mcp-server
# Then in your MCP client config:
{
"command": "npx",
"args": ["-y", "airtable-mcp-server@latest"]
}
๐ ๏ธ Development
Scripts
| Command | Description |
|---|---|
npm run dev |
Development mode with hot reload |
npm run build |
Compile TypeScript to JavaScript |
npm start |
Run compiled server |
npm run clean |
Remove build artifacts |
npm test |
Run unit tests |
npm run test:integration |
Run integration tests |
npm run test:all |
Run all tests |
Project Structure
airtable-mcp-server/
โโโ src/
โ โโโ index.ts # Server entry point
โ โโโ config/
โ โ โโโ index.ts # Configuration management
โ โ โโโ validation.ts # Config validation
โ โโโ tools/
โ โ โโโ index.ts # Tool registry
โ โ โโโ getRecord.ts # Record retrieval tool
โ โโโ types/
โ โ โโโ index.ts # Type definitions
โ โโโ utils/
โ โโโ error.ts # Error handling
โ โโโ validation.ts # Input validation
โโโ tests/
โ โโโ integration.test.ts # Integration tests
โ โโโ unit/
โ โ โโโ tools.test.ts # Unit tests
โ โโโ fixtures/
โ โโโ sample-record.json # Test data
โโโ examples/
โ โโโ claude-desktop.json # Claude Desktop config
โ โโโ cursor-ide.json # Cursor IDE config
โ โโโ vscode.json # VS Code config
โ โโโ usage.md # Usage examples
โโโ docs/
โ โโโ DEPLOYMENT.md # Deployment guide
โโโ dist/ # Compiled JavaScript (generated)
โโโ PRD.md # Product requirements
โโโ CLAUDE.md # Claude Code guidance
โโโ package.json
โโโ tsconfig.json
โโโ .env.example
โโโ README.md
๐ Security
Token Management
- Environment Only: Never commit tokens to version control
- Minimal Scope: Use read-only permissions for target bases only
- Token Rotation: Support for refreshing tokens when needed
Input Validation
- Record IDs must match pattern:
rec[A-Za-z0-9]{14} - Base IDs must match pattern:
app[A-Za-z0-9]{14} - Table names are sanitized for safe usage
Rate Limiting
- Respects Airtable's 5 requests/second per base limit
- Implements exponential backoff for rate limit errors
- Configurable retry attempts and delays
โ๏ธ Configuration
Environment variables:
| Variable | Required | Default | Description |
|---|---|---|---|
AIRTABLE_PERSONAL_ACCESS_TOKEN |
Yes | - | Your Airtable PAT |
AIRTABLE_TIMEOUT |
No | 30000 | Request timeout (ms) |
AIRTABLE_RETRY_ATTEMPTS |
No | 3 | Number of retry attempts |
AIRTABLE_RETRY_DELAY |
No | 1000 | Retry delay (ms) |
๐จ Error Handling
The server handles various error scenarios:
| Error Type | HTTP Status | Description |
|---|---|---|
| Invalid Record ID | 404 | Record not found or invalid format |
| Authentication Failure | 401 | Invalid or expired token |
| Access Forbidden | 403 | Token lacks permissions |
| Rate Limit Exceeded | 429 | Too many requests |
| Invalid Parameters | 422 | Malformed request data |
| Server Error | 500+ | Airtable service issues |
All errors return structured responses with helpful messages.
๐ Performance
Requirements Met
- โ Response Time: <2 seconds for record retrieval
- โ Memory Usage: <50MB baseline footprint
- โ Concurrent Requests: Handles up to Airtable's rate limits
- โ Error Recovery: Graceful handling with exponential backoff
Monitoring
- Request/response logging to stderr
- Configuration validation on startup
- Structured error messages for debugging
๐งช Testing
Manual Testing
-
Valid Record Retrieval:
# Replace with your actual IDs echo '{"recordId":"recYourRecordId","baseId":"appYourBaseId","tableName":"YourTable"}' | node dist/index.js -
Error Scenarios:
- Invalid record ID format
- Non-existent record
- Invalid base ID
- Missing permissions
- Rate limiting
Test Cases
The implementation includes comprehensive error handling for:
- โ Successful record retrieval
- โ Validation errors (invalid ID formats)
- โ Authentication failures (401/403)
- โ Not found errors (404)
- โ Rate limiting (429)
- โ Server errors (500+)
๐ Future Enhancements
Planned Features
- Additional Tools: Create, update, delete operations
- Batch Operations: Multi-record processing
- Advanced Queries: Formula-based filtering
- Field Selection: Granular field retrieval
- HTTP Transport: REST API support
- Caching: Redis-based response caching
Production Features
- OAuth integration
- Multi-base support
- Audit logging
- High availability deployment
๐ Troubleshooting
Common Issues
Server won't start:
- Check that
AIRTABLE_PERSONAL_ACCESS_TOKENis set - Verify token has read permissions for target bases
- Ensure Node.js 18+ is installed
Authentication errors:
- Verify token is valid and not expired
- Check token has access to specified base
- Confirm base ID format:
appXXXXXXXXXXXXXX
Record not found:
- Verify record ID format:
recXXXXXXXXXXXXXX - Check record exists in specified table
- Confirm table name is exactly correct (case-sensitive)
Rate limiting:
- Reduce request frequency
- Implement delays between requests
- Monitor Airtable usage limits
Debug Mode
Enable verbose logging:
DEBUG=* npm run dev
๐ License
MIT License - see LICENSE file for details.
๐ค Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Submit a pull request
๐ Resources
Version: 1.0.0
Compatible with: Claude Desktop, Cursor IDE, VS Code MCP extensions
Node.js: 18+ required
Airtable API: Personal Access Token authentication
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.