# Airtable User MCP (npm · airtable-user-mcp)

Manage Airtable bases: schema, field CRUD, views, formula validation, extensions

- Trust score: 80/100 (high trust)
- Change this week: +34
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `airtable-user-mcp`: 80/100 (this document), [markdown](https://verifymcp.io/servers/automations-project-airtable-user-mcp/airtable-user-mcp.md), [page](https://verifymcp.io/servers/automations-project-airtable-user-mcp/airtable-user-mcp)

## Channel facts

- Registry: `npm`
- Package: `airtable-user-mcp`
- Version: `2.1.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (140 of 145), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (140 of 145), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to Automations-Project/VSCode-Airtable-Formula).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 3 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 77/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3459 tokens (~104/item across 33 items; 33 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add automations-project-airtable-user-mcp -- npx -y airtable-user-mcp
```

### Codex

```bash
codex mcp add automations-project-airtable-user-mcp -- npx -y airtable-user-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "automations-project-airtable-user-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "airtable-user-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add automations-project-airtable-user-mcp --command npx --arg -y --arg airtable-user-mcp
```

### Hermes

```yaml
mcp_servers:
  automations-project-airtable-user-mcp:
    command: "npx"
    args: ["-y", "airtable-user-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "automations-project-airtable-user-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "airtable-user-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 80, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 76, +70)

- [security improvement] Install scripts: unverified → pass
- [security improvement] Provenance: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [security] The attested source repository moved: Automations-Project/VSCode-Airtable-Formula
- [functional regression] Dependency health: partial → unverified
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] License: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] Licence: MIT

### 2026-08-01 (score 6, −15)

- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional] First check of Schema quality: unverified

### 2026-07-31 (score 21, −7)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 28, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (33)

### `get_base_schema` (~67 tokens)

Get the full schema of an Airtable base including all tables, fields, and views.

Input parameters:

- `appId` (string, required): The Airtable base/application ID (e.g. "appXXX")
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics

### `list_tables` (~61 tokens)

List all tables in an Airtable base with their IDs and names. Uses lightweight scaffolding data.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics

### `get_table_schema` (~81 tokens)

Get the full schema for a single table including all fields and views.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `tableIdOrName` (string, required): The table ID (e.g. "tblXXX") or exact table name

### `list_fields` (~76 tokens)

List all fields (columns) in a specific table of an Airtable base.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `tableIdOrName` (string, required): The table ID or name to list fields for

### `list_views` (~72 tokens)

List all views in a specific table with their IDs, names, and types.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `tableIdOrName` (string, required): The table ID or name

### `create_field` (~250 tokens)

Create a new field in an Airtable table. Supports all field types including computed fields (formula, rollup, lookup, count) that are not available via the official API.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `description` (string): Optional field description
- `fieldType` (string, required): The field type: "formula", "rollup", "lookup", "count", "text", "number", "checkbox", etc.
- `insertAfterFieldId` (string): Optional: field ID to insert after. Omit to append at end.
- `name` (string, required): Name for the new field
- `tableId` (string, required): The table ID to create the field in (e.g. "tblXXX")
- `typeOptions` (object): Type-specific config. For formula: { formulaText: "..." }. For rollup: { fieldIdInLinkedTable, recordLinkFieldId, resultType, referencedFieldIds }. For lookup: { recordLinkFieldId, fieldIdInLinkedTab…

### `create_formula_field` (~103 tokens)

Create a new formula field in a table. Shorthand for create_field with type "formula".

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `formulaText` (string, required): The formula expression
- `name` (string, required): Name for the new formula field
- `tableId` (string, required): The table ID (e.g. "tblXXX")

### `validate_formula` (~112 tokens)

Validate a formula expression before creating or updating a formula field. Returns whether the formula is valid and what result type it produces (text, number, etc). Use this before create/update to catch errors early.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `formulaText` (string, required): The formula expression to validate
- `tableId` (string, required): The table ID where the formula will be used

### `update_field_config` (~139 tokens)

Update the configuration of any computed field (formula, rollup, lookup, count, etc). Use this to change formula text, rollup settings, etc.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `fieldId` (string, required): The field/column ID (e.g. "fldXXX")
- `fieldType` (string, required): The field type: "formula", "rollup", "lookup", "count"
- `typeOptions` (object, required): Type-specific options. For formula: { formulaText: "..." }

### `update_formula_field` (~95 tokens)

Update the formula text of an existing formula field. Shorthand for update_field_config with type "formula".

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `fieldId` (string, required): The field/column ID (e.g. "fldXXX")
- `formulaText` (string, required): The new formula text

### `rename_field` (~92 tokens)

Rename a field (column) in an Airtable table. Pre-validates the field exists before mutating.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `fieldId` (string, required): The field/column ID to rename
- `newName` (string, required): The new name for the field

### `delete_field` (~160 tokens)

Delete a field from an Airtable table. Requires both fieldId AND the expected field name as a safety guard. First checks for downstream dependencies — if found, returns dependency info instead of deleting. Set force=true to delete even with dependencies.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `expectedName` (string, required): The expected name of the field. Must match exactly or deletion is refused.
- `fieldId` (string, required): The field/column ID to delete (e.g. "fldXXX")
- `force` (boolean): When true, delete even if the field has downstream dependencies (other fields referencing it). Default: false.

### `create_view` (~184 tokens)

Create a new view in an Airtable table. Optionally copy configuration from an existing view. View types: "grid", "form", "kanban", "calendar", "gallery", "gantt", "levels" (list view).

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `copyFromViewId` (string): Optional: view ID to copy configuration from (creates a fresh view with same settings).
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `name` (string, required): Name for the new view
- `tableId` (string, required): The table ID to create the view in
- `type` (string): View type: "grid", "form", "kanban", "calendar", "gallery", "gantt", "levels" (list). Default: "grid".

### `duplicate_view` (~109 tokens)

Duplicate an existing view with all its configuration (filters, sorts, field visibility, etc).

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `newName` (string, required): Name for the duplicated view
- `sourceViewId` (string, required): The view ID to duplicate (e.g. "viwXXX")
- `tableId` (string, required): The table ID the view belongs to

### `rename_view` (~80 tokens)

Rename a view.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `newName` (string, required): The new name for the view
- `viewId` (string, required): The view ID to rename (e.g. "viwXXX")

### `delete_view` (~79 tokens)

Delete a view from a table. Cannot delete the last remaining view in a table.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `viewId` (string, required): The view ID to delete (e.g. "viwXXX")

### `update_view_description` (~86 tokens)

Update the description text of a view.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `description` (string, required): The new description text. Use empty string to clear.
- `viewId` (string, required): The view ID (e.g. "viwXXX")

### `update_view_filters` (~135 tokens)

Update the filter configuration of a view. Supports AND/OR conjunctions with field-level filter conditions.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `filters` (object, required): Filter config: { filterSet: [{ columnId: "fldXXX", operator: "contains"|"isEmpty"|"isNot"|..., value: "..." }], conjunction: "and"|"or" }
- `viewId` (string, required): The view ID to update filters on (e.g. "viwXXX")

### `reorder_view_fields` (~138 tokens)

Reorder the fields (columns) displayed in a view. Provide a mapping of field IDs to their desired column index positions.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `fieldOrder` (object, required): Map of field IDs to target column indices: { "fldXXX": 0, "fldYYY": 1, "fldZZZ": 2 }. Index 0 is the leftmost position after the primary field.
- `viewId` (string, required): The view ID (e.g. "viwXXX")

### `show_or_hide_view_columns` (~116 tokens)

Show or hide specific fields (columns) in a view. Unlike show_or_hide_all, this targets individual columns.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `columnIds` (array, required): Array of field IDs to show or hide
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `viewId` (string, required): The view ID (e.g. "viwXXX")
- `visibility` (boolean, required): true to show, false to hide

### `apply_view_sorts` (~96 tokens)

Apply sort conditions to a view. Pass an empty array to clear all sorts.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `sorts` (array, required): Array of sort conditions. Empty array [] clears all sorts.
- `viewId` (string, required): The view ID (e.g. "viwXXX")

### `update_view_group_levels` (~94 tokens)

Set grouping on a view. Pass an empty array to clear grouping.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `groupLevels` (array, required): Array of group levels. Empty array [] clears grouping.
- `viewId` (string, required): The view ID (e.g. "viwXXX")

### `update_view_row_height` (~95 tokens)

Change the row height of a grid view.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `rowHeight` (string, required): Row height: "small", "medium", "large", or "xlarge"
- `viewId` (string, required): The view ID (e.g. "viwXXX")

### `update_field_description` (~81 tokens)

Update the description text of a field.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `description` (string, required): The new description text
- `fieldId` (string, required): The field/column ID (e.g. "fldXXX")

### `duplicate_field` (~100 tokens)

Duplicate (clone) a field in a table. Optionally also duplicate the cell values.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `duplicateCells` (boolean): Also copy cell values. Default: false
- `sourceFieldId` (string, required): The field ID to duplicate
- `tableId` (string, required): The table ID

### `create_extension` (~104 tokens)

Create a new extension (block) in an Airtable base. Returns the block ID needed for installation. Use this to register custom extensions before installing them.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `name` (string, required): Name for the extension
- `releaseId` (string, required): The release ID of the extension (e.g. "blrXXX")

### `create_extension_dashboard` (~71 tokens)

Create a new extension dashboard page in a base. Extensions are installed onto dashboard pages.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `name` (string, required): Name for the dashboard page

### `install_extension` (~118 tokens)

Install an extension onto a dashboard page. Requires a block ID (from create_extension) and a page ID (from create_extension_dashboard).

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `blockId` (string, required): The block ID (e.g. "blkXXX")
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `name` (string, required): Display name for this installation
- `pageId` (string, required): The dashboard page ID (e.g. "bipXXX")

### `update_extension_state` (~81 tokens)

Enable or disable an extension installation.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `installationId` (string, required): The block installation ID (e.g. "bliXXX")
- `state` (string, required): "enabled" or "disabled"

### `rename_extension` (~77 tokens)

Rename an installed extension.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `installationId` (string, required): The block installation ID (e.g. "bliXXX")
- `name` (string, required): New name for the extension

### `duplicate_extension` (~80 tokens)

Duplicate an installed extension on a dashboard page.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `pageId` (string, required): The dashboard page to place the duplicate on
- `sourceInstallationId` (string, required): The installation ID to duplicate

### `remove_extension` (~70 tokens)

Remove an installed extension from a dashboard.

Input parameters:

- `appId` (string, required): The Airtable base/application ID
- `debug` (boolean): When true, include raw Airtable response in output for diagnostics
- `installationId` (string, required): The block installation ID to remove (e.g. "bliXXX")

### `manage_tools` (~157 tokens)

Control which tools are available. Actions: list_profiles, switch_profile, get_tool_status, toggle_tool, toggle_category. Use this to switch between read-only, safe-write, full, or custom profiles, or enable/disable individual tools.

Input parameters:

- `action` (string, required): The action to perform
- `category` (string): Category name for toggle_category action (read, field-write, field-destructive, view-write, view-destructive, extension)
- `enabled` (boolean): Enable (true) or disable (false) for toggle_tool / toggle_category actions
- `profile` (string): Profile name for switch_profile action (read-only, safe-write, full, custom)
- `tool` (string): Tool name for toggle_tool action

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/automations-project-airtable-user-mcp/airtable-user-mcp#diagnostics

## Score history

- 2026-08-03: 80
- 2026-08-02: 76
- 2026-08-01: 6
- 2026-07-31: 21
- 2026-07-30: 28
- 2026-07-28: 46
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/airtable-user-mcp
- Socket report: https://socket.dev/npm/package/airtable-user-mcp
- Repository: https://github.com/Automations-Project/VSCode-Airtable-Formula
- Website: https://github.com/Automations-Project/VSCode-Airtable-Formula/tree/main/packages/mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/automations-project-airtable-user-mcp/airtable-user-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/automations-project-airtable-user-mcp/airtable-user-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/automations-project-airtable-user-mcp/airtable-user-mcp
