Airtable database integration with schema inspection, read and write capabilities
This document details the airtable-mcp-server
, a crucial component for bridging the gap between Large Language Models (LLMs) and Airtable databases. By implementing the Model Context Protocol (MCP), this server allows LLMs to seamlessly access, interpret, and manipulate data within Airtable, unlocking powerful new AI-driven workflows.
The airtable-mcp-server
acts as an intermediary, translating LLM requests into Airtable API calls and vice versa. This enables LLMs to:
To integrate this server with an LLM application like the Claude Desktop app, configure the mcpServers
section of your application's configuration file (e.g., claude_desktop_config.json
). Here's a sample configuration:
{ "mcpServers": { "airtable": { "command": "npx", "args": [ "-y", "airtable-mcp-server" ], "env": { "AIRTABLE_API_KEY": "pat123.abc123" } } } }
Important: Replace pat123.abc123
with your actual Airtable personal access token. Ensure the token has the necessary permissions:
schema.bases:read
: Required for accessing database schemas.data.records:read
: Required for reading data.data.records:write
(Optional): Required for creating, updating, and deleting data.The server exposes a comprehensive set of tools, each designed for specific interactions with Airtable:
list_records
: Retrieves records from a specified table.
baseId
(string, required): The Airtable base ID.tableId
(string, required): The table ID.maxRecords
(number, optional): Maximum records to return (default: 100).filterByFormula
(string, optional): Airtable formula for filtering.search_records
: Searches for records containing specific text.
baseId
(string, required): The Airtable base ID.tableId
(string, required): The table ID.searchTerm
(string, required): The text to search for.fieldIds
(array, optional): Specific field IDs to search within (searches all text fields if omitted).maxRecords
(number, optional): Maximum records to return (default: 100).get_record
: Retrieves a specific record by its ID.
baseId
(string, required): The Airtable base ID.tableId
(string, required): The table ID.recordId
(string, required): The record ID.list_bases
: Lists all accessible Airtable bases.
list_tables
: Lists all tables within a specified base.
baseId
(string, required): The Airtable base ID.detailLevel
(string, optional): Level of detail to retrieve (tableIdentifiersOnly
, identifiersOnly
, or full
).detailLevel
).describe_table
: Provides detailed information about a specific table.
baseId
(string, required): The Airtable base ID.tableId
(string, required): The table ID.detailLevel
(string, optional): Level of detail to retrieve (tableIdentifiersOnly
, identifiersOnly
, or full
).list_tables
but for a single table. Use this to get details about a specific table without fetching all tables in the base.create_record
: Creates a new record in a table.
baseId
(string, required): The Airtable base ID.tableId
(string, required): The table ID.fields
(object, required): An object containing field names and their corresponding values.update_records
: Updates one or more records in a table.
baseId
(string, required): The Airtable base ID.tableId
(string, required): The table ID.records
(array, required): An array of objects, each containing a recordId
and a fields
object with the updates.delete_records
: Deletes one or more records from a table.
baseId
(string, required): The Airtable base ID.tableId
(string, required): The table ID.recordIds
(array, required): An array of record IDs to delete.create_table
: Creates a new table in a base.
baseId
(string, required): The Airtable base ID.name
(string, required): The name of the new table.description
(string, optional): A description of the table.fields
(array, required): An array of field definitions (name, type, description, options).update_table
: Updates a table's name or description.
baseId
(string, required): The Airtable base ID.tableId
(string, required): The table ID.name
(string, optional): The new name for the table.description
(string, optional): The new description for the table.create_field
: Creates a new field in a table.
baseId
(string, required): The Airtable base ID.tableId
(string, required): The table ID.name
(string, required): The name of the new field.type
(string, required): The type of the field.description
(string, optional): A description of the field.options
(object, optional): Field-specific options.update_field
: Updates a field's name or description.
baseId
(string, required): The Airtable base ID.tableId
(string, required): The table ID.fieldId
(string, required): The ID of the field.name
(string, optional): The new name for the field.description
(string, optional): The new description for the field.The server exposes schema information for Airtable bases and tables through a standardized URL format:
airtable://<baseId>/<tableId>/schema
This endpoint provides a JSON schema containing:
This schema information is automatically discovered from Airtable's metadata API, ensuring that LLMs always have access to the most up-to-date database structure.
Contributions are highly encouraged! To contribute:
npm install
.npm run test
.npm run build
. Use npm run build:watch
for automatic rebuilding during development.This project adheres to semantic versioning. To create a new release:
npm version <major | minor | patch>
to bump the version number.git push --follow-tags
.๐ โ๏ธ Biomedical research server providing access to PubMed, ClinicalTrials.gov, and MyVariant.info.
๐ MCP server that provides SQL analysis, linting, and dialect conversion using [SQLGlot](https://github.com/tobymao/sqlglot)
๐ ๐ All-in-one MCP server for Postgres development and operations, with tools for performance analysis, tuning, and health checks
Supabase MCP Server with support for SQL query execution and database exploration tools