# Airtable User MCP

**Category:** 🏢 Workplace & Productivity  
**Repository:** https://github.com/Automations-Project/VSCode-Airtable-Formula  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/airtable-user-mcp

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

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

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

## Documentation & README

<div align="center">

<picture>
  <source media="(prefers-color-scheme: dark)"  srcset="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/mcp-server/assets/banner-dark.svg">
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/mcp-server/assets/banner-light.svg">
  <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/mcp-server/assets/banner-light.svg" alt="airtable-user-mcp — 72 Airtable tools (plus manage_tools) your AI assistant can't get from the official Airtable REST API" width="900" />
</picture>

# Airtable Formulas, Scripts, Automation, MCP & LSP

**Formula, script & automation editor · MCP server (72 tools + `manage_tools`) · Language server · AI skills**

<table align="center">
<tr>
  <th align="center">VS Code</th>
  <th align="center">Open VSX</th>
  <th align="center">npm · MCP</th>
  <th align="center">npm · LSP</th>
  <th align="center">MCP Registry</th>
</tr>
<tr>
  <td align="center">
    <a href="https://marketplace.visualstudio.com/items?itemName=Nskha.airtable-formula"><img src="https://vsmarketplacebadges.dev/version-short/Nskha.airtable-formula.svg?style=for-the-badge&label=Version&colorB=007ACC" alt="VS Code version" /></a><br/>
    <a href="https://marketplace.visualstudio.com/items?itemName=Nskha.airtable-formula"><img src="https://vsmarketplacebadges.dev/installs-short/Nskha.airtable-formula.svg?style=for-the-badge&label=Installs&colorB=1E8CBE" alt="VS Code installs" /></a>
  </td>
  <td align="center">
    <a href="https://open-vsx.org/extension/Nskha/airtable-formula"><img src="https://img.shields.io/open-vsx/v/Nskha/airtable-formula?style=for-the-badge&logo=eclipseide&logoColor=white&label=Version&color=C160EF" alt="Open VSX version" /></a><br/>
    <a href="https://open-vsx.org/extension/Nskha/airtable-formula"><img src="https://img.shields.io/open-vsx/dt/Nskha/airtable-formula?style=for-the-badge&logo=eclipseide&logoColor=white&label=Downloads&color=A855F7" alt="Open VSX downloads" /></a>
  </td>
  <td align="center">
    <a href="https://www.npmjs.com/package/airtable-user-mcp"><img src="https://img.shields.io/npm/v/airtable-user-mcp?style=for-the-badge&logo=npm&logoColor=white&label=Version&color=CB3837" alt="npm version" /></a><br/>
    <a href="https://www.npmjs.com/package/airtable-user-mcp"><img src="https://img.shields.io/npm/dw/airtable-user-mcp?style=for-the-badge&logo=npm&logoColor=white&label=DL%2FWeek&color=F43F5E" alt="npm downloads per week" /></a>
  </td>
  <td align="center">
    <a href="https://www.npmjs.com/package/airtable-user-lsp"><img src="https://img.shields.io/npm/v/airtable-user-lsp?style=for-the-badge&logo=npm&logoColor=white&label=Version&color=CB3837" alt="LSP version" /></a>
  </td>
  <td align="center">
    <a href="https://registry.modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP%20Registry-Listed-1D4ED8?style=for-the-badge" alt="MCP Registry listing" /></a>
  </td>
</tr>
</table>

<p align="center">
  <a href="https://github.com/Automations-Project/VSCode-Airtable-Formula/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/Automations-Project/VSCode-Airtable-Formula/ci.yml?branch=main&style=for-the-badge&logo=githubactions&logoColor=white&label=CI" alt="CI status" /></a>
  <a href="https://github.com/Automations-Project/VSCode-Airtable-Formula/releases/latest"><img src="https://img.shields.io/github/v/release/Automations-Project/VSCode-Airtable-Formula?style=for-the-badge&logo=github&logoColor=white&label=Latest%20Release&color=10B981" alt="Latest release" /></a>
  <a href="https://github.com/Automations-Project/VSCode-Airtable-Formula/commits/main"><img src="https://img.shields.io/github/last-commit/Automations-Project/VSCode-Airtable-Formula?style=for-the-badge&logo=github&logoColor=white&label=Last%20Commit&color=6366F1" alt="Last commit" /></a>
  <a href="https://github.com/Automations-Project/VSCode-Airtable-Formula/stargazers"><img src="https://img.shields.io/github/stars/Automations-Project/VSCode-Airtable-Formula?style=for-the-badge&logo=github&logoColor=white&label=Stars&color=FBBF24" alt="GitHub stars" /></a>
  <a href="LICENSE"><img src="https://img.shields.io/github/license/Automations-Project/VSCode-Airtable-Formula?style=for-the-badge&logo=opensourceinitiative&logoColor=white&label=License&color=22C55E" alt="License" /></a>
</p>

<br />

> **Not affiliated with Airtable Inc.** This is a community-maintained project.
>
> **Active development** — Breaking changes may land between minor versions. Pin to a version if you need stability.

</div>

---

## Top Features

| Feature | What it does | File types |
|:--------|:-------------|:----------:|
| **Formula Editor** | Syntax highlighting, IntelliSense, beautify / minify | `.formula`, `.min.formula` |
| **Script Editor** | Completions, hover docs, diagnostics | `.ats`, `.script` |
| **Automation Editor** | Completions, hover docs, diagnostics | `.ata`, `.automation` |
| **MCP Server (72 tools + `manage_tools`)** | Full Airtable internal API — schema, views, fields, records, extensions, templates | — |
| **Language Server (LSP)** | Standalone multi-editor support — Neovim, Zed, Helix, OpenCode | All above |
| **IDE Auto-Setup** | One-click MCP config for Cursor, Windsurf, Claude Desktop, Cline, Amp | — |
| **AI Skills** | Pre-built Airtable-specific rules and workflows for AI coding assistants | — |
| **Daemon + Tunnel** | Persistent background server; optional Cloudflare or ngrok remote access | — |
| **Tool Profiles** | `read-only` (12 tools) / `safe-write` (54 tools) / `full` (72 tools) / `custom` permission scopes | — |
| **OS Keychain Auth** | Browser-based Airtable login with SSO/2FA — credentials in your OS keychain | — |

---

## Why this exists

Airtable's public Web API has never exposed some of the most common tasks builders actually need: creating a formula field, tweaking a view's filter set, installing an extension, or validating a formula before it breaks production. The official Airtable MCP server is a thin wrapper over that same REST API, so it inherits every one of those gaps.

**`airtable-user-mcp` is an add-on to the official Airtable MCP, not a replacement.** It uses Airtable's own internal API (the one the web UI uses) to cover exactly the surface area the REST API can't reach. Register both servers in your AI client and your assistant gets the full Airtable automation experience — records over HTTP via the official MCP, plus schema, formulas, views, and extensions via this one.

<div align="center">
<picture>
  <source media="(prefers-color-scheme: dark)"  srcset="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/mcp-server/assets/architecture-dark.svg">
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/mcp-server/assets/architecture-light.svg">
  <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/mcp-server/assets/architecture-light.svg" alt="Architecture: AI Client → Official MCP + airtable-user-mcp → Airtable" width="900" />
</picture>
</div>

---

## What `airtable-user-mcp` adds on top of the official Airtable MCP

This is a coverage map, not a "pick one" decision — the two servers are complementary and designed to run side-by-side.

| Capability | Official Airtable MCP | **airtable-user-mcp** |
|---|---|---|
| **Total tools** | ~17 | **73** (72 + `manage_tools`) |
| **Auth model** | Personal Access Token or OAuth, per-scope setup | **Log in once with your normal Airtable account** (SSO/2FA supported) |
| **Transport** | HTTP (remote) | stdio (local, private) |
| **Data never leaves your machine** | ❌ Requests go through `mcp.airtable.com` | ✅ Runs locally against Airtable's API |
| **Schema read (bases, tables, fields, views)** | Partial (no view config) | **Full** — filters, sorts, groups, visibility, row height, descriptions |
| **Read records with resolved field values** | Partial | ✅ `query_records` — returns lookup/rollup/formula fields fully resolved |
| **Search records by text** (incl. lookup fields) | ❌ `filterByFormula` with `FIND()`/`SEARCH()` silently fails on lookup fields | ✅ `query_records.search` — substring match on all resolved values |
| **Duplicate records** | ❌ | ✅ `duplicate_records` |
| **Create formula fields** | ❌ `UNSUPPORTED_FIELD_TYPE_FOR_CREATE` | ✅ |
| **Create rollup fields** | ❌ | ✅ |
| **Create lookup / multipleLookupValues fields** | ❌ | ✅ |
| **Create count fields** | ❌ | ✅ |
| **Update formula text of an existing field** | ❌ | ✅ |
| **Validate a formula before applying** | ❌ | ✅ |
| **Rename / duplicate / safely delete fields** | Partial (no duplicate, no dependency summary) | ✅ with `expectedName` guard + dependency preview |
| **Create views (grid/form/kanban/calendar/gallery/gantt/list)** | ❌ (API has no create-view endpoint) | ✅ |
| **Set/append view filters (nested AND/OR)** | ❌ | ✅ |
| **Set view sorts** | ❌ | ✅ |
| **Set view grouping** | ❌ | ✅ |
| **Change column order** | ❌ | ✅ |
| **Show/hide columns in a view** | ❌ | ✅ |
| **Change row height** | ❌ | ✅ |
| **Duplicate a view with its full configuration** | ❌ | ✅ |
| **View descriptions, cell wrap, covers, color config, calendar dates, frozen columns** | ❌ | ✅ |
| **Sidebar sections (create, rename, move, delete)** | ❌ | ✅ |
| **Record templates (create, pre-fill, duplicate, apply, delete)** | ❌ | ✅ |
| **Form metadata (description, redirect, attribution, branding)** | ❌ | ✅ |
| **Extension / block management (install, enable, rename, duplicate, remove)** | ❌ | ✅ |
| **Create dashboard pages** | ❌ | ✅ |
| **Daemon self-diagnosis (session dead? browser busy? daemon gone?)** | ❌ | ✅ `manage_daemon` `action=status`, plus start / restart / stop / tunnel / token rotation |
| **Tool profiles & per-tool toggles** | ❌ | ✅ read-only (12) / safe-write (54) / full (72) / custom |
| **Destructive-action safety guards** | Relies on token scopes | ✅ `expectedName` match, dependency summary, `force` flag |
| **Batch record create limit** | 10 / request | Uses the same Airtable limit; no added restriction |
| **VS Code / Cursor / Windsurf / Cline / Amp one-click install** | Manual JSON edit per IDE | ✅ One click via the companion extension |
| **Formula editor with IntelliSense** | ❌ | ✅ (VS Code extension) |
| **Credentials storage** | You manage the PAT | OS keychain, auto-refresh |
| **Plan requirement** | Airtable plan with API access + token scopes | Any plan you can log into |
| **Price** | Free | Free, MIT |

*Sources: [Airtable's official MCP docs](https://support.airtable.com/docs/using-the-airtable-mcp-server), [Airtable Web API reference](https://www.airtable.com/developers/web/api/introduction), and the [`UNSUPPORTED_FIELD_TYPE_FOR_CREATE` rollup thread](https://community.airtable.com/development-apis-11/how-to-set-up-a-rollup-field-using-the-api-4879).*

---

## Use both MCPs together

```bash
npx -y airtable-user-mcp login          # one-time browser login
claude mcp add airtable --scope user -- npx -y airtable-user-mcp   # Claude Code
```

`airtable-user-mcp` is additive. Register the official Airtable MCP following [Airtable's setup guide](https://support.airtable.com/docs/using-the-airtable-mcp-server), then add this one alongside it in the same `mcpServers` block:

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

Your MCP client will expose every tool from both servers. The two entries are independent — rename the keys (`airtable`, `airtable-official`, `airtable-user-mcp`, etc.) however makes sense for your workflow.

---

## What's In This Repo

This monorepo ships **three products** from one source tree:

<div align="center">

| | Product | Install |
|:-:|:--------|:--------|
| <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/extension/images/icon.png" width="24" /> | **Airtable Formulas, Scripts, Automation, MCP & LSP** — VS Code extension | [Marketplace](https://marketplace.visualstudio.com/items?itemName=Nskha.airtable-formula) |
| <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/mcp-server/assets/icon.png" width="24" /> | **airtable-user-mcp** — Standalone MCP server | `npx airtable-user-mcp` |
| <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/mcp-server/assets/icon.png" width="24" /> | **airtable-user-lsp** — Airtable language server | `npx airtable-user-lsp` |

</div>

---

## Demo

<div align="center">

[![Using Claude Code to manage base views, computed fields & extensions — Reddit demo](https://img.shields.io/badge/▶_Watch_Demo-Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white)](https://www.reddit.com/r/Airtable/comments/1skmqe1/using_claude_code_to_manage_base_views_computed/)

</div>

---

## Features

### MCP Server (72 Tools + `manage_tools`)

Manage Airtable bases with capabilities **not available through the official REST API**:

| Category | Tools | Highlights |
|:---------|:-----:|:-----------|
| **Schema Read** | 11 | Full schema inspection — bases, tables, fields, views, sidebar sections, record templates; download all formula fields to local files |
| **Record Read** | 1 | `query_records` — up to 1 000 records/call with resolved field values; `search` param works on lookup/rollup fields (REST API `filterByFormula` doesn't) |
| **Record Write** | 4 | `create_records` / `update_records` / `duplicate_records` / `upload_attachment` (the only way to write `multipleAttachments` cells by URL) |
| **Record Destructive** | 1 | `delete_records` — batch-delete records from a table |
| **Table Management** | 3 | create / rename / delete tables |
| **Field Management** | 9 | Create formula / rollup / lookup / count fields, validate formulas, update descriptions, delete single or bulk |
| **View Configuration** | 20 | Filters, sorts, grouping, columns, freezing, row height, covers, color rules, calendar dates, create / duplicate / rename / delete |
| **Sidebar Sections** | 4 | Create, rename, move-into-section, delete (auto-promotes contained views to ungrouped) |
| **Record Templates** | 8 | Create / rename / describe / set cells / set columns / duplicate / apply / delete saved row scaffolds |
| **Form Metadata** | 2 | Description, redirect URL, attribution, copy-to-respondent, branding (legacy form views) |
| **Extension Management** | 7 | Create, install, enable/disable, rename, duplicate, remove extensions |
| **Tool Management** | 1 | List profiles, switch profile, toggle tools/categories (meta-tool, always enabled — not part of any profile) |
| **Base Sync** | 1 | `sync_base` — copy a base's schema, views, and records to another base. `mode=plan`/`diff`/`status` are read-only; `mode=apply` mutates the destination and, with `policy=mirror` plus the confirmation flags, can delete tables, fields, views, sections and records; `mode=reconcile` updates local mapping state. Drift-guarded and resumable via journal. |
| **Daemon Control** | 1 | `manage_daemon` — `action=status` is read-only self-diagnosis: daemon liveness, transport, uptime, tunnel URL, and the live session state (dead session, last breaker trip with Airtable's own response body, browser busy queue) that tells "daemon gone" from "session dead" from "browser busy". Also `start` / `restart` / `stop` / `tunnel_enable` / `tunnel_disable` / `token_rotate`. `full` profile only. |

See the full tool reference in [`packages/mcp-server/README.md`](packages/mcp-server/README.md).

#### One shared daemon

The extension starts the shared MCP daemon whenever a tool call needs one, so every VS Code window uses **one**
Airtable browser session instead of one per window — that duplication is what produced most "session dead" errors.
A daemon you stop from the dashboard stays stopped, and if it cannot start, the extension falls back to a
per-window server so your tools keep working.

Because a daemon is usually running, other MCP clients on the same machine (Claude Desktop, Cursor, Cline, Amp)
attach to it and therefore run under **its** auth mode and HTTP client rather than their own — deliberately, since
two browsers on one Airtable profile crash. Each such client prints one stderr line saying so. See
[Sharing one daemon across clients](packages/mcp-server/README.md#sharing-one-daemon-across-clients).

### LSP Server

**`airtable-user-lsp`** is a standalone language server for Airtable formula, script, and automation files — works in any LSP-capable editor, not just VS Code.

```bash
# stdio mode — works standalone, no daemon needed
npx airtable-user-lsp --stdio
```

Features: diagnostics, completions, hover documentation, and signature help for `.formula`, `.ats`, and `.ata` files.

When the daemon is running, it auto-spawns `airtable-user-lsp --tcp` so multiple editors share one language server instance. The TCP port is written to `~/.airtable-user-mcp/daemon.lock` as `port_lsp`.

See [`packages/lsp-server/README.md`](packages/lsp-server/README.md) for per-editor configuration (Neovim, Zed, OpenCode, Helix).

---

## Supported IDEs

The extension auto-configures MCP for all major AI-enabled editors:

<div align="center">

| <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/webview/src/assets/icons/claude.svg" width="28" /> | <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/webview/src/assets/icons/claude-code.svg" width="28" /> | <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/webview/src/assets/icons/cursor.svg" width="28" /> | <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/webview/src/assets/icons/windsurf.svg" width="28" /> | <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/webview/src/assets/icons/cline.svg" width="28" /> | <img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/webview/src/assets/icons/amp.svg" width="28" /> |
|:---:|:---:|:---:|:---:|:---:|:---:|
| Claude Desktop | Claude Code | Cursor | Windsurf | Cline | Amp |

</div>

**Don't use VS Code?** Use the standalone MCP server directly:

```bash
npx airtable-user-mcp
```

---

## Find Us

<div align="center">

| Registry | Link |
|:---------|:-----|
| **VS Code Marketplace** | [`Nskha.airtable-formula`](https://marketplace.visualstudio.com/items?itemName=Nskha.airtable-formula) |
| **npm** | [`airtable-user-mcp`](https://www.npmjs.com/package/airtable-user-mcp) |
| **Open VSX** | [`Nskha.airtable-formula`](https://open-vsx.org/extension/Nskha/airtable-formula) |
| **MCP Registry** | [`io.github.automations-project/airtable-user-mcp`](https://registry.modelcontextprotocol.io) |
| **Glama** | [glama.ai/mcp/servers](https://glama.ai/mcp/servers/Automations-Project/VSCode-Airtable-Formula) |
| **PulseMCP** | [pulsemcp.com](https://www.pulsemcp.com/servers/automations-project-airtable-user) |
| **MCP.so** | [mcp.so](https://mcp.so/client/airtable-user-mcp/Automations-Project) |
| **Reddit** | [Video demo — managing views, computed fields & extensions with Claude Code](https://www.reddit.com/r/Airtable/comments/1skmqe1/using_claude_code_to_manage_base_views_computed/) |

</div>

---

## Requirements

- **VS Code** ^1.100.0 (or any fork exposing the `McpServerDefinitionProvider` API)
- **Node.js** — bundled via the VS Code runtime; no separate install needed
- **Google Chrome** (or Edge / Chromium) — the Airtable login flow uses [Patchright](https://github.com/Kaliiiiiiiiii/patchright-nodejs) in headless mode. Falls back to `msedge` on Windows and `chromium` on Linux. The extension shows an actionable warning if no supported browser is detected.

---

## Development

This is a **pnpm monorepo**.

| Package | Description |
|:--------|:------------|
| `packages/extension` | VS Code extension host (TypeScript + tsup) |
| `packages/webview` | React dashboard webview (Vite + Tailwind v4) |
| `packages/shared` | Shared types and message protocol |
| `packages/mcp-server` | [`airtable-user-mcp`](https://www.npmjs.com/package/airtable-user-mcp) — ESM Node MCP server |
| `packages/lsp-server` | [`airtable-user-lsp`](https://www.npmjs.com/package/airtable-user-lsp) — LSP server for formula / script / automation files |
| `scripts/` | Build tooling (esbuild bundler, dep vendoring) |

```bash
pnpm install          # install all packages
pnpm build            # build shared → webview → mcp bundle → extension
pnpm package          # build + create airtable-formula-X.Y.Z.vsix
pnpm test             # run all unit tests
pnpm dev              # start webview dev server (browser preview)
```

**How the MCP server is bundled:** `scripts/bundle-mcp.mjs` esbuilds `packages/mcp-server/src/` into `packages/extension/dist/mcp/`. Then `scripts/prepare-package-deps.mjs` vendors `patchright`, `patchright-core`, `otpauth`, `impit` and `@ngrok/ngrok` into `dist/node_modules/` before `vsce package` runs, so an installed extension needs no `npm install` at runtime.

**Platform-specific VSIXes.** `impit` (the Chrome-TLS HTTP client) and `@ngrok/ngrok` (the ngrok tunnel provider) keep their compiled native binary in separate per-platform npm packages, and only the one matching the build machine is ever installed. A single VSIX therefore *cannot* carry working native binaries for every platform. Instead we publish **one VSIX per platform**, each vendoring only its own binaries — VS Code and Open VSX hand each user the build matching their machine. Supported targets:

| Target | `impit` | `@ngrok/ngrok` |
| --- | --- | --- |
| `win32-x64` | `impit-win32-x64-msvc` | `@ngrok/ngrok-win32-x64-msvc` |
| `win32-arm64` | `impit-win32-arm64-msvc` | `@ngrok/ngrok-win32-arm64-msvc` |
| `darwin-x64` | `impit-darwin-x64` | `@ngrok/ngrok-darwin-x64` |
| `darwin-arm64` | `impit-darwin-arm64` | `@ngrok/ngrok-darwin-arm64` |
| `linux-x64` | `impit-linux-x64-gnu` | `@ngrok/ngrok-linux-x64-gnu` |
| `linux-arm64` | `impit-linux-arm64-gnu` | `@ngrok/ngrok-linux-arm64-gnu` |
| `alpine-x64` | `impit-linux-x64-musl` | `@ngrok/ngrok-linux-x64-musl` |
| `alpine-arm64` | `impit-linux-arm64-musl` | `@ngrok/ngrok-linux-arm64-musl` |

`linux-armhf` (32-bit ARM) is **not published**: `impit` ships no `arm-gnueabihf` build, so an armhf VSIX would advertise `airtableFormula.mcp.httpClient: "impit"` and then fail with "Cannot find native binding". No untargeted fallback is published either, for the same reason.

The matrix is defined once in [`scripts/vsix-targets.mjs`](scripts/vsix-targets.mjs); versions and tarball hashes are pinned to `pnpm-lock.yaml`. `scripts/package-targets.mjs` builds every target and `scripts/assert-vsix-binaries.mjs` verifies each artifact contains exactly its own platform's `.node` files and no other's — **byte-for-byte**, against the SHA-256 digests in [`scripts/native-binary-digests.json`](scripts/native-binary-digests.json), which are recorded from tarballs verified against `pnpm-lock.yaml`'s integrity hashes. Filenames, `package.json` `os`/`cpu`, and a magic number are all labels an artifact carries about itself and cannot distinguish an x64 binary from an ARM64 one, or a glibc build from a musl one; an exact digest can.

Together these are **eight target artifact packaging/assertion smokes** — eight `.vsix` files built and their contents verified on one machine. They are not runtime smokes of eight native bindings: any single host can only load the binding compiled for itself, so **only the host target's binding receives a genuine runtime load**. Verifying the other seven by exact content is the strongest claim a single-host build can make about them.

The standalone npm package [`airtable-user-mcp`](https://www.npmjs.com/package/airtable-user-mcp) is unaffected and stays **universal** — npm resolves the right optional dependency on your own machine at install time.

---

## Support This Project

This project is built and maintained with the help of AI coding tools. If you find it useful and want to support continued development (new tools, updates, bug fixes), you can contribute by gifting **Claude Code credits** — the primary tool used to build this project.

Interested? [Open an issue](https://github.com/Automations-Project/VSCode-Airtable-Formula/issues/new) or reach out to discuss feature requests and sponsorship.

---

## License

[MIT](LICENSE)

