Skip to main content
Glama
medlag

Airtable MCP Server

by medlag

Airtable MCP Server

CI License: MIT

A Model Context Protocol server that lets Claude (or any MCP client) read, create, update, and search records in an Airtable base through your own API key.

It exposes five tools over stdio:

Tool

What it does

list_records

List records from a table, with optional view, page size, max records, and an Airtable filterByFormula.

get_record

Fetch a single record by its ID.

create_record

Create a record from a fields object.

update_record

Update selected fields on an existing record.

search_records

Case-insensitive substring search on one field.

Why

Airtable is where a lot of small teams keep their CRM, content calendar, or ops tracker. This server puts that data one instruction away from Claude — "add a lead for Acme Corp", "which deals are still open?" — without exporting anything or writing glue code per question.

Related MCP server: Airtable MCP Server

Requirements

  • Node.js 18+ (uses the built-in fetch)

  • An Airtable personal access token with data.records:read and data.records:write scopes

  • The base ID of the base you want to expose (from the base URL: airtable.com/appXXXXXXXXXXXXXX/...)

Install & build

git clone https://github.com/medlag/airtable-mcp-server.git
cd airtable-mcp-server
npm install
npm run build

Configuration

The server reads two required environment variables:

Variable

Required

Description

AIRTABLE_API_KEY

yes

Airtable personal access token.

AIRTABLE_BASE_ID

yes

ID of the base to operate on.

AIRTABLE_API_URL

no

Override the API base URL (defaults to https://api.airtable.com/v0).

Copy .env.example to .env for local runs, or set the variables in your MCP client config (below). The token is only ever read from the environment — it is never logged or written to disk.

Use it with Claude Desktop

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "airtable": {
      "command": "node",
      "args": ["/absolute/path/to/airtable-mcp-server/dist/index.js"],
      "env": {
        "AIRTABLE_API_KEY": "patXXXXXXXXXXXXXX.XXXXXXXX",
        "AIRTABLE_BASE_ID": "appXXXXXXXXXXXXXX"
      }
    }
  }
}

Restart Claude Desktop; the five tools appear under the plug icon.

Use it with Claude Code

claude mcp add airtable \
  --env AIRTABLE_API_KEY=patXXXXXXXXXXXXXX.XXXXXXXX \
  --env AIRTABLE_BASE_ID=appXXXXXXXXXXXXXX \
  -- node /absolute/path/to/airtable-mcp-server/dist/index.js

Example prompts

Once connected, you can ask things like:

  • "List 10 rows from the Leads table."

  • "Create a record in Tasks with Name 'Ship v1' and Status 'In progress'."

  • "Find every record in Contacts whose Company contains 'acme'."

  • "Mark record recABC123 in Tasks as Done."

list_records and search_records return a single Airtable page — up to 100 records. Narrow with filterByFormula, a view, or maxRecords rather than expecting the full table.

Design notes

  • Typed REST wrapper — each Airtable endpoint maps to one method in src/airtable-client.ts; API errors surface as a structured AirtableError with the HTTP status and Airtable's own message.

  • stdout is sacred — MCP speaks JSON-RPC over stdout, so all logs go to stderr (src/logger.ts).

  • Fail fast on config — missing env vars throw a clear message at startup instead of a confusing 401 later (src/config.ts).

  • Input validation — every tool argument is validated with zod before a request is made.

Development

npm run dev        # tsc --watch (build config)
npm run typecheck  # type-check src + tests, no emit
npm test           # unit tests (Node's built-in runner via tsx)

Testing

The suite runs on Node's built-in test runner — no test framework dependency — and covers the logic that must not regress:

  • config — missing/blank env vars fail fast; values are trimmed; the API URL override is honoured.

  • formulasearch_records escapes backslashes and double quotes, and the field name is validated at the tool boundary, so a crafted value or field can't break out of the Airtable formula (injection guard).

  • airtable-client — GET/POST/PATCH shapes, bearer auth, query-string building, and both error paths (non-2xx → AirtableError with the API's message and status; transport failure → status 0). The fetch implementation is injected, so these run offline.

CI runs typecheck → build → test on Node 18, 20, and 22.

License

MIT — see LICENSE.

Available Tools

5 tools
create_recordCreate recordB

Create a new record in an Airtable table from a fields object.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable name or ID.
fieldsYesField name to value map, matching the table's columns.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must convey behavioral traits. It only states the action without disclosing side effects, error handling, permissions, or what the operation returns, which is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the core action. Every word earns its place, with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations or output schema, the description leaves out key context such as return values, potential errors, and behavior on invalid fields. While parameters are fully described, the tool's overall behavior is under-specified for an agent to invoke confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both 'table' and 'fields' described. The description adds no extra semantic detail beyond rephrasing 'fields' as 'fields object,' so it meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Create a new record in an Airtable table from a fields object,' providing a specific verb (create) and resource (record in Airtable table). This action is distinct from sibling tools (get/list/update/search), so purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention any conditions, exclusions, or alternative tools, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recordGet recordA

Fetch a single Airtable record by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable name or ID.
recordIdYesRecord ID (starts with rec).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. 'Fetch' clearly indicates a read-only operation with no side effects. However, it does not disclose error behavior or the return format, leaving some gaps for a tool without an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence, front-loaded with the verb and resource, with zero extraneous words. It earns its place entirely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple fetch tool with only two well-documented parameters, the description is adequate for an agent to select and invoke it. The lack of an output schema means a brief mention of the return value would enhance completeness, but it is not critical given the implied behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description's 'by its ID' slightly reinforces recordId's purpose but adds no meaningful new information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch a single Airtable record by its ID', using a specific verb and resource, and explicitly scopes to a single record. This distinguishes it from sibling tools like list_records and search_records.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this tool when you have a specific record ID. It doesn't explicitly mention alternatives or exclusions, but the intended usage is unambiguous from the wording.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recordsList recordsA

List records from an Airtable table (a single page, up to 100 records), with optional view, page size, max records, and an Airtable filterByFormula expression.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoView name or ID to read from.
tableYesTable name or ID.
pageSizeNoRecords per page (1-100).
maxRecordsNoCap on records returned (1-100).
filterByFormulaNoAirtable formula filter, e.g. {Status} = "Done".

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the key behavioral trait of returning only a single page (up to 100 records), which is important for an agent to know. It does not mention output format or error behavior, but the single-page limitation is well conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-structured sentence that front-loads the core purpose and immediately states the key constraint. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description adequately covers pagination and optional parameters. However, it does not explicitly describe the return value structure (e.g., array of record objects with fields), which would be valuable in the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides descriptions for all parameters (100% coverage), so the baseline is 3. The description adds value by summarizing how parameters work together (optional view, page size, max records, filterByFormula) and clarifying the single-page constraint that gives meaning to pageSize and maxRecords.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists records from an Airtable table, with a specific verb 'list' and a resource. It distinguishes from siblings like get_record by noting it returns multiple records (up to 100) and includes optional view, page size, max records, and filterByFormula.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for reading multiple records with optional filtering and pagination, providing clear context. However, it does not explicitly mention when to choose this over search_records or get_record, such as 'for complex searches use search_records'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_recordsSearch recordsA

Find records whose given field contains a text value (case-insensitive substring match, single page of up to 100 records).

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldYesField to search within.
tableYesTable name or ID.
valueYesText to look for inside the field.
maxRecordsNoCap on records returned (1-100).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It adds key details: case-insensitive substring match and single-page cap of 100 records. It does not mention ordering or side effects, but core behavior is well-covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with 'Find records', and uses no unnecessary words. It efficiently communicates scope, matching rule, and page limit.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential behavior and limit for a search tool, but without an output schema or annotations, it omits return format and sorting. These are minor gaps; the description is otherwise adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by specifying case-insensitive substring matching for the 'value' parameter and clarifying that maxRecords limits to a single page, not just a cap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's specific verb+resource: 'Find records' with a field/value substring match. It distinguishes from siblings (get_record retrieves a single record, list_records lists all) by its search semantics and page limit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for searching records by field value, providing clear context. However, it does not explicitly say when to use it over alternatives like list_records or get_record, nor provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_recordUpdate recordA

Update fields on an existing Airtable record. Only the provided fields change.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable name or ID.
fieldsYesField name to value map of the columns to change.
recordIdYesRecord ID (starts with rec).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It discloses the key partial-update behavior ('Only the provided fields change'), which is valuable. However, it does not mention error handling, permissions, idempotency, or what happens if the record doesn't exist, leaving some gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and followed by a concise behavioral note. Every word earns its place; there is no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update tool with complete schema coverage and no output schema, the description is adequately complete. It explains what the tool does and the scope of updates (only provided fields). It could mention return values or error conditions, but these are not critical given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are fully documented in the schema. The description adds minimal extra meaning by reinforcing the 'fields' parameter as the 'map of the columns to change,' but it does not introduce new syntax or format details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Update fields on an existing Airtable record.' The verb 'update' is specific, and the resource 'existing Airtable record' is precise. It distinguishes from siblings like create_record, get_record, list_records, and search_records by focusing on modifying an existing record rather than creating, reading, listing, or searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you need to change fields on an existing record) but does not explicitly contrast with alternatives or state when not to use it. It lacks explicit 'use this instead of X' guidance, though the sibling list makes the context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv1.0.0
    • First observedcreate_record
    • First observedget_record
    • First observedlist_records
    • First observedsearch_records
    • First observedupdate_record

TDQS

A3.9/5.0
Disambiguation4/5

Each tool targets a distinct operation: get by ID, list with optional formula, create, update, and substring search. Search and list have some overlap, but their purposes are clearly differentiated by descriptions.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with snake_case (get_record, list_records, create_record, update_record, search_records), making the set predictable.

Tool Count5/5

Five tools is well-scoped for a focused Airtable CRUD-like server, covering core read and write operations without unnecessary bloat.

Completeness3/5

Missing delete_record is a notable gap in lifecycle coverage. Read (get/list/search), create, and update are present, but the inability to delete records limits full CRUD operations.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Provides comprehensive access to the Airtable Web API, enabling AI assistants to create and manage bases, tables, fields, records, views, and webhooks with support for 25+ field types, batch operations, and enterprise features.
    32
    22
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/medlag/airtable-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server