
Security News
/Research
Wallet-Draining npm Package Impersonates Nodemailer to Hijack Crypto Transactions
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
@chinchillaenterprises/mcp-airtable
Advanced tools
Multi-tenant Airtable MCP server with account management and credential persistence
A Model Context Protocol (MCP) server that provides read-only access to Airtable workspaces. This server enables listing bases, tables, views, and records with comprehensive filtering and pagination support.
Install the server using Claude Code:
# Install with user scope for global availability
claude mcp add airtable -s user -e AIRTABLE_ACCESS_TOKEN=your-token -- npx @chinchillaenterprises/mcp-airtable
# Or install with project scope for team sharing
claude mcp add airtable -s project -e AIRTABLE_ACCESS_TOKEN=your-token -- npx @chinchillaenterprises/mcp-airtable
This server requires an Airtable personal access token or OAuth token.
data.records:read
- Read recordsschema.bases:read
- Read base schemaSet your Airtable access token:
export AIRTABLE_ACCESS_TOKEN="patXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
airtable_list_bases
List all accessible bases in your workspace.
No parameters required.
Returns: List of bases with IDs, names, and permission levels.
airtable_get_base_schema
Get complete schema for a base including all tables and fields.
Parameters:
baseId
(required): Airtable base ID (starts with 'app')airtable_list_tables
List all tables in a base.
Parameters:
baseId
(required): Airtable base ID (starts with 'app')Returns: List of tables with names, IDs, and descriptions.
airtable_get_table_schema
Get detailed schema for a specific table.
Parameters:
baseId
(required): Airtable base ID (starts with 'app')tableId
(required): Table ID or nameReturns: Table details including all fields with types and configurations.
airtable_list_records
List records from a table with extensive filtering options.
Parameters:
baseId
(required): Airtable base ID (starts with 'app')tableId
(required): Table ID or namemaxRecords
(optional): Maximum records to return (1-100, default: 100)pageSize
(optional): Page size for pagination (1-100, default: 100)offset
(optional): Pagination offset from previous responseview
(optional): View ID or name to usefilterByFormula
(optional): Airtable formula to filter recordssort
(optional): Array of sort configurationsfields
(optional): Array of field names to includeExample:
{
"baseId": "appXXXXXXXXXXXXXX",
"tableId": "Tasks",
"filterByFormula": "AND({Status} = 'In Progress', {Priority} = 'High')",
"sort": [
{ "field": "Due Date", "direction": "asc" }
],
"fields": ["Name", "Status", "Due Date", "Assignee"]
}
airtable_get_record
Get a single record by ID.
Parameters:
baseId
(required): Airtable base ID (starts with 'app')tableId
(required): Table ID or namerecordId
(required): Record ID (starts with 'rec')airtable_search_records
Search records using Airtable formulas.
Parameters:
baseId
(required): Airtable base ID (starts with 'app')tableId
(required): Table ID or namefilterByFormula
(required): Airtable formula to filter recordsmaxRecords
(optional): Maximum records to returnsort
(optional): Array of sort configurationsfields
(optional): Array of field names to includeExample formulas:
// Find records where Name contains "Project"
"SEARCH('Project', {Name})"
// Find records created this week
"IS_AFTER({Created}, DATEADD(TODAY(), -7, 'days'))"
// Complex filter with multiple conditions
"AND({Status} != 'Done', {Assignee} = 'John Doe', {Priority} > 3)"
airtable_list_views
List all views in a table.
Parameters:
baseId
(required): Airtable base ID (starts with 'app')tableId
(required): Table ID or nameReturns: List of views with names, IDs, and types.
airtable_get_view_records
Get records from a specific view with view filters applied.
Parameters:
baseId
(required): Airtable base ID (starts with 'app')tableId
(required): Table ID or nameviewId
(required): View ID or namemaxRecords
(optional): Maximum records to returnpageSize
(optional): Page size for paginationoffset
(optional): Pagination offsetfields
(optional): Array of field names to include// 1. List all bases
{
"tool": "airtable_list_bases"
}
// 2. Get base schema
{
"tool": "airtable_get_base_schema",
"args": {
"baseId": "appXXXXXXXXXXXXXX"
}
}
// 3. List records from a table
{
"tool": "airtable_list_records",
"args": {
"baseId": "appXXXXXXXXXXXXXX",
"tableId": "Projects",
"maxRecords": 10
}
}
// Search for high-priority tasks assigned to specific person
{
"tool": "airtable_search_records",
"args": {
"baseId": "appXXXXXXXXXXXXXX",
"tableId": "Tasks",
"filterByFormula": "AND({Assignee} = 'Jane Smith', {Priority} = 'High', {Status} != 'Completed')",
"sort": [
{ "field": "Due Date", "direction": "asc" }
],
"fields": ["Task Name", "Due Date", "Status", "Notes"]
}
}
// 1. List available views
{
"tool": "airtable_list_views",
"args": {
"baseId": "appXXXXXXXXXXXXXX",
"tableId": "Tasks"
}
}
// 2. Get records from "This Week" view
{
"tool": "airtable_get_view_records",
"args": {
"baseId": "appXXXXXXXXXXXXXX",
"tableId": "Tasks",
"viewId": "This Week",
"fields": ["Task Name", "Assignee", "Due Date"]
}
}
// First page
{
"tool": "airtable_list_records",
"args": {
"baseId": "appXXXXXXXXXXXXXX",
"tableId": "Contacts",
"pageSize": 50
}
}
// Next page (using offset from previous response)
{
"tool": "airtable_list_records",
"args": {
"baseId": "appXXXXXXXXXXXXXX",
"tableId": "Contacts",
"pageSize": 50,
"offset": "itrXXXXXXXXXXXXXX/recXXXXXXXXXXXXXX"
}
}
Common formula patterns for filtering:
SEARCH('text', {Field Name})
{Field} = 'Value'
{Field} != 'Value'
{Number Field} > 5
IS_AFTER({Date Field}, '2024-01-01')
{Field} = BLANK()
AND(condition1, condition2)
or OR(condition1, condition2)
{Checkbox Field} = TRUE()
The server provides detailed error messages for common scenarios:
Airtable API has a rate limit of 5 requests per second. This server automatically:
To test the server with your Airtable workspace:
# 1. Install dependencies
cd mcp-airtable
npm install
# 2. Build the server
npm run build
# 3. Set your access token
export AIRTABLE_ACCESS_TOKEN="your-token-here"
# 4. Add server locally for testing
claude mcp add airtable-test -s user -- node $(pwd)/dist/index.js
# 5. Start Claude and test
claude
# Try: "List all my Airtable bases"
This is a read-only server. The following operations are not supported:
These write operations may be added in Phase 2.
git clone <repository>
cd mcp-airtable
npm install
npm run build
npm run build # Build once
npm run dev # Build and watch for changes
MIT License - see LICENSE file for details.
Note: This MCP server provides read-only access to your Airtable data. Always ensure you're using appropriate access tokens with minimal required permissions.
FAQs
Multi-tenant Airtable MCP server with account management and credential persistence
The npm package @chinchillaenterprises/mcp-airtable receives a total of 3 weekly downloads. As such, @chinchillaenterprises/mcp-airtable popularity was classified as not popular.
We found that @chinchillaenterprises/mcp-airtable demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.