loading…
Search for a command to run...
loading…
Airtable database integration with schema inspection, read and write capabilities
Airtable database integration with schema inspection, read and write capabilities
A Model Context Protocol server that provides read and write access to Airtable databases. This server enables LLMs to inspect database schemas, then read and write records.
https://github.com/user-attachments/assets/c8285e76-d0ed-4018-94c7-20535db6c944
Follow the instructions on install-mcp, which generates the right config for your MCP client (Claude Code, Claude Desktop, Cursor, Cline, VS Code, and more).
You'll need an Airtable personal access token — create one here with scopes schema.bases:read and data.records:read (and optionally schema.bases:write, data.records:write, data.recordComments:read, data.recordComments:write), and access to the bases you want to use. It looks something like pat123.abc123 (but longer). Set it as AIRTABLE_API_KEY (replacing the placeholder in the generated config).
list_records
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the table to querymaxRecords (number, optional): Maximum number of records to return. Defaults to 100.filterByFormula (string, optional): Airtable formula to filter recordssearch_records
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the table to querysearchTerm (string, required): Text to search for in recordsfieldIds (array, optional): Specific field IDs to search in. If not provided, searches all text-based fields.maxRecords (number, optional): Maximum number of records to return. Defaults to 100.list_bases
list_tables
baseId (string, required): The ID of the Airtable basedetailLevel (string, optional): The amount of detail to get about the tables (tableIdentifiersOnly, identifiersOnly, or full)detailLevel)describe_table
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the table to describedetailLevel (string, optional): The amount of detail to get about the table (tableIdentifiersOnly, identifiersOnly, or full)get_record
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the tablerecordId (string, required): The ID of the record to retrievecreate_record
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the tablefields (object, required): The fields and values for the new recordupdate_records
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the tablerecords (array, required): Array of objects containing record ID and fields to updatedelete_records
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the tablerecordIds (array, required): Array of record IDs to deletecreate_table
baseId (string, required): The ID of the Airtable basename (string, required): Name of the new tabledescription (string, optional): Description of the tablefields (array, required): Array of field definitions (name, type, description, options)update_table
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the tablename (string, optional): New name for the tabledescription (string, optional): New description for the tablecreate_field
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the tablename (string, required): Name of the new fieldtype (string, required): Type of the fielddescription (string, optional): Description of the fieldoptions (object, optional): Field-specific optionsupdate_field
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the tablefieldId (string, required): The ID of the fieldname (string, optional): New name for the fielddescription (string, optional): New description for the fieldcreate_comment
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the tablerecordId (string, required): The ID of the recordtext (string, required): The comment textparentCommentId (string, optional): Parent comment ID for threaded replieslist_comments
baseId (string, required): The ID of the Airtable basetableId (string, required): The ID of the tablerecordId (string, required): The ID of the recordpageSize (number, optional): Number of comments to return (max 100, default 100)offset (string, optional): Pagination offset for retrieving additional commentsThe server can also run in HTTP mode for use with remote MCP clients:
MCP_TRANSPORT=http PORT=3000 npx airtable-mcp-server
This starts a stateless HTTP server at http://localhost:3000/mcp. Note: HTTP transport has no built-in authentication - only use behind a reverse proxy or in a secured environment.
Pull requests are welcomed on GitHub! To get started:
npm installnpm run test to run testsnpm run buildnpm run build:watch to automatically build after editing src/index.ts. This means you can hit save, reload Claude Desktop (with Ctrl/Cmd+R), and the changes apply.Versions follow the semantic versioning spec.
To release:
npm version <major | minor | patch> to bump the versiongit push --follow-tags to push with tagsRun in your terminal:
claude mcp add domdomegg-airtable-mcp-server -- npx Yes, domdomegg/airtable-mcp-server MCP is free — one-click install via Unyly at no cost.
No, domdomegg/airtable-mcp-server runs without API keys or environment variables.
Self-hosted: the server runs locally on your machine via the install command above.
Open domdomegg/airtable-mcp-server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
pro tip
Just installed domdomegg/airtable-mcp-server? Say to Claude: "remember why I installed domdomegg/airtable-mcp-serverand what I want to try" — it'll save into your Vault.
how this works →CSA PROJECT - FZCO © 2026 IFZA Business Park, DDP, Premises Number 31174 - 001
Security
Low riskAutomated heuristic from public metadata — not a security guarantee.