airtable-user-mcp 0.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +295 -5
- package/package.json +47 -1
- package/src/auth.js +381 -0
- package/src/cache.js +68 -0
- package/src/cli.js +133 -0
- package/src/client.js +798 -0
- package/src/health-check.js +108 -0
- package/src/icon.js +2 -0
- package/src/index.js +1103 -0
- package/src/login-runner.js +207 -0
- package/src/login.js +214 -0
- package/src/tool-config.js +340 -0
package/README.md
CHANGED
|
@@ -1,5 +1,295 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/mcp-server/assets/icon.png" alt="Airtable User MCP" width="140" />
|
|
4
|
+
|
|
5
|
+
# airtable-user-mcp
|
|
6
|
+
|
|
7
|
+
**Community MCP server for Airtable — 30 tools your AI assistant can't get from the official API**
|
|
8
|
+
|
|
9
|
+
[](https://www.npmjs.com/package/airtable-user-mcp)
|
|
10
|
+
[](https://modelcontextprotocol.io)
|
|
11
|
+
[](https://github.com/Automations-Project/VSCode-Airtable-Formula/blob/main/LICENSE)
|
|
12
|
+
[](https://marketplace.visualstudio.com/items?itemName=Nskha.airtable-formula)
|
|
13
|
+
|
|
14
|
+
<br />
|
|
15
|
+
|
|
16
|
+
> **Not affiliated with Airtable Inc.** This is a community-maintained project.
|
|
17
|
+
>
|
|
18
|
+
> **Experimental** — This project is under active development and not intended for production use. APIs, tools, and behavior may change without notice.
|
|
19
|
+
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Why this server?
|
|
25
|
+
|
|
26
|
+
The official Airtable REST API doesn't expose formula field creation, view configuration, or extension management. **airtable-user-mcp** fills that gap by using Airtable's internal API, giving your AI assistant capabilities that are otherwise only available through the Airtable UI.
|
|
27
|
+
|
|
28
|
+
<div align="center">
|
|
29
|
+
|
|
30
|
+
| | Capability | Official API | This Server |
|
|
31
|
+
|:-:|:-----------|:---:|:---:|
|
|
32
|
+
| **S** | Schema inspection (bases, tables, fields, views) | Partial | Full |
|
|
33
|
+
| **F** | Create formula / rollup / lookup / count fields | No | Yes |
|
|
34
|
+
| **V** | Validate formulas before applying | No | Yes |
|
|
35
|
+
| **C** | View config (filters, sorts, groups, visibility) | No | Yes |
|
|
36
|
+
| **E** | Extension / block management | No | Yes |
|
|
37
|
+
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Quick Start
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npx airtable-user-mcp
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
That's it. Your MCP client connects via **stdio** and gets access to all 30 tools.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Supported Clients
|
|
53
|
+
|
|
54
|
+
Works with any MCP-compatible client. Tested with:
|
|
55
|
+
|
|
56
|
+
<div align="center">
|
|
57
|
+
|
|
58
|
+
| <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" /> |
|
|
59
|
+
|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
60
|
+
| Claude Desktop | Claude Code | Cursor | Windsurf | Cline | Amp |
|
|
61
|
+
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
### Advanced GUI
|
|
65
|
+
|
|
66
|
+
For a visual management experience, install the **[Airtable Formula](https://marketplace.visualstudio.com/items?itemName=Nskha.airtable-formula)** VS Code extension. It bundles this MCP server and adds:
|
|
67
|
+
|
|
68
|
+
- **One-click MCP registration** for Cursor, Windsurf, Claude Code, Cline, and Amp
|
|
69
|
+
- **Dashboard** with session status, version info, and setup wizard
|
|
70
|
+
- **Airtable login** with credentials in OS keychain and auto-refresh
|
|
71
|
+
- **Formula editor** with syntax highlighting, IntelliSense, and beautify/minify
|
|
72
|
+
|
|
73
|
+
<!-- TODO: Replace with actual screenshot -->
|
|
74
|
+
<!-- <p align="center"><img src="https://raw.githubusercontent.com/Automations-Project/VSCode-Airtable-Formula/main/packages/extension/images/screenshot-dashboard.png" alt="Dashboard Screenshot" width="700" /></p> -->
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Installation
|
|
79
|
+
|
|
80
|
+
### Via npx (recommended)
|
|
81
|
+
|
|
82
|
+
Add to your MCP client config (`mcp.json`, `claude_desktop_config.json`, etc.):
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"mcpServers": {
|
|
87
|
+
"airtable": {
|
|
88
|
+
"command": "npx",
|
|
89
|
+
"args": ["-y", "airtable-user-mcp"]
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Via VS Code / Windsurf / Cursor
|
|
96
|
+
|
|
97
|
+
Install the [Airtable Formula](https://marketplace.visualstudio.com/items?itemName=Nskha.airtable-formula) extension — it bundles this server and registers it automatically across all your IDEs.
|
|
98
|
+
|
|
99
|
+
### From source
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"mcpServers": {
|
|
104
|
+
"airtable": {
|
|
105
|
+
"command": "node",
|
|
106
|
+
"args": ["/path/to/airtable-user-mcp/src/index.js"]
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Authentication
|
|
115
|
+
|
|
116
|
+
The server uses browser-based authentication via [Patchright](https://github.com/Kaliiiiiiiiii/patchright-nodejs).
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# 1. Install the browser engine (one-time, ~170 MB)
|
|
120
|
+
npx airtable-user-mcp install-browser
|
|
121
|
+
|
|
122
|
+
# 2. Log in to Airtable
|
|
123
|
+
npx airtable-user-mcp login
|
|
124
|
+
|
|
125
|
+
# 3. Verify your session
|
|
126
|
+
npx airtable-user-mcp status
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Sessions are cached in `~/.airtable-user-mcp/` and reused automatically.
|
|
130
|
+
|
|
131
|
+
**Headless / CI environments:** Set `AIRTABLE_NO_BROWSER=1` to use cached cookies only, without launching a browser.
|
|
132
|
+
|
|
133
|
+
**Diagnostics:** Run `npx airtable-user-mcp doctor` to check browser availability, session health, and config.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Tools (30)
|
|
138
|
+
|
|
139
|
+
### Schema Read (5)
|
|
140
|
+
|
|
141
|
+
| Tool | Description |
|
|
142
|
+
|:-----|:------------|
|
|
143
|
+
| `get_base_schema` | Full schema of all tables, fields, and views in a base |
|
|
144
|
+
| `list_tables` | List all tables in a base with IDs and names |
|
|
145
|
+
| `get_table_schema` | Full schema for a single table |
|
|
146
|
+
| `list_fields` | All fields in a table with types and configuration |
|
|
147
|
+
| `list_views` | All views in a table with IDs, names, and types |
|
|
148
|
+
|
|
149
|
+
### Field Management (8)
|
|
150
|
+
|
|
151
|
+
| Tool | Description |
|
|
152
|
+
|:-----|:------------|
|
|
153
|
+
| `create_field` | Create a field — including formula, rollup, lookup, count |
|
|
154
|
+
| `create_formula_field` | Create a formula field (shorthand) |
|
|
155
|
+
| `validate_formula` | Validate a formula expression before applying |
|
|
156
|
+
| `update_formula_field` | Update the formula text of an existing field |
|
|
157
|
+
| `update_field_config` | Update configuration of any computed field |
|
|
158
|
+
| `rename_field` | Rename a field with pre-validation |
|
|
159
|
+
| `delete_field` | Delete with safety guards and dependency checks |
|
|
160
|
+
| `duplicate_field` | Clone a field, optionally copying cell values |
|
|
161
|
+
|
|
162
|
+
### View Configuration (11)
|
|
163
|
+
|
|
164
|
+
| Tool | Description |
|
|
165
|
+
|:-----|:------------|
|
|
166
|
+
| `create_view` | Create grid, form, kanban, calendar, gallery, gantt, or list view |
|
|
167
|
+
| `duplicate_view` | Clone a view with all configuration |
|
|
168
|
+
| `rename_view` | Rename a view |
|
|
169
|
+
| `delete_view` | Delete a view (cannot delete last view) |
|
|
170
|
+
| `update_view_description` | Set or clear a view's description |
|
|
171
|
+
| `update_view_filters` | Set filter conditions with AND/OR conjunctions |
|
|
172
|
+
| `reorder_view_fields` | Change column order |
|
|
173
|
+
| `show_or_hide_view_columns` | Toggle column visibility |
|
|
174
|
+
| `apply_view_sorts` | Set or clear sort conditions |
|
|
175
|
+
| `update_view_group_levels` | Set or clear grouping |
|
|
176
|
+
| `update_view_row_height` | Change row height (small / medium / large / xlarge) |
|
|
177
|
+
|
|
178
|
+
### Field Metadata (1)
|
|
179
|
+
|
|
180
|
+
| Tool | Description |
|
|
181
|
+
|:-----|:------------|
|
|
182
|
+
| `update_field_description` | Set or update a field's description text |
|
|
183
|
+
|
|
184
|
+
### Extension Management (5)
|
|
185
|
+
|
|
186
|
+
| Tool | Description |
|
|
187
|
+
|:-----|:------------|
|
|
188
|
+
| `create_extension` | Register a new extension/block in a base |
|
|
189
|
+
| `create_extension_dashboard` | Create a new dashboard page |
|
|
190
|
+
| `install_extension` | Install an extension onto a dashboard page |
|
|
191
|
+
| `update_extension_state` | Enable or disable an installed extension |
|
|
192
|
+
| `rename_extension` | Rename an installed extension |
|
|
193
|
+
| `duplicate_extension` | Clone an installed extension |
|
|
194
|
+
| `remove_extension` | Remove an extension from a dashboard |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Usage Examples
|
|
199
|
+
|
|
200
|
+
### Inspect a base schema
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
Tool: list_tables
|
|
204
|
+
Args: { "appId": "appXXXXXXXXXXXXXX" }
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Create and validate a formula
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
Tool: validate_formula
|
|
211
|
+
Args: { "appId": "appXXX", "tableId": "tblXXX", "formulaText": "IF({Price}>0,{Price}*{Qty},0)" }
|
|
212
|
+
|
|
213
|
+
Tool: create_formula_field
|
|
214
|
+
Args: { "appId": "appXXX", "tableId": "tblXXX", "name": "Total", "formulaText": "IF({Price}>0,{Price}*{Qty},0)" }
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Configure view filters
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
Tool: update_view_filters
|
|
221
|
+
Args: {
|
|
222
|
+
"appId": "appXXX",
|
|
223
|
+
"viewId": "viwXXX",
|
|
224
|
+
"filters": {
|
|
225
|
+
"filterSet": [
|
|
226
|
+
{ "columnId": "fldXXX", "operator": "isNotEmpty" }
|
|
227
|
+
],
|
|
228
|
+
"conjunction": "and"
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Safety
|
|
236
|
+
|
|
237
|
+
- **Destructive operations** (`delete_field`, `delete_view`, `remove_extension`) include built-in safety guards
|
|
238
|
+
- `delete_field` requires both `fieldId` **and** `expectedName`, and checks for downstream dependencies before deleting
|
|
239
|
+
- Formula validation is available and recommended before creating/updating formulas
|
|
240
|
+
- All tools accept `debug: true` for raw response inspection
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## ID Format Reference
|
|
245
|
+
|
|
246
|
+
| Entity | Prefix | Example |
|
|
247
|
+
|:-------|:-------|:--------|
|
|
248
|
+
| Base / App | `app` | `appXXXXXXXXXXXXXX` |
|
|
249
|
+
| Table | `tbl` | `tblXXXXXXXXXXXXXX` |
|
|
250
|
+
| Field | `fld` | `fldXXXXXXXXXXXXXX` |
|
|
251
|
+
| View | `viw` | `viwXXXXXXXXXXXXXX` |
|
|
252
|
+
| Block | `blk` | `blkXXXXXXXXXXXXXX` |
|
|
253
|
+
| Block Installation | `bli` | `bliXXXXXXXXXXXXXX` |
|
|
254
|
+
| Dashboard Page | `bip` | `bipXXXXXXXXXXXXXX` |
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Protocol
|
|
259
|
+
|
|
260
|
+
| | |
|
|
261
|
+
|:--|:--|
|
|
262
|
+
| **Transport** | stdio (JSON-RPC 2.0) |
|
|
263
|
+
| **MCP Version** | 2025-11-25 |
|
|
264
|
+
| **SDK** | `@modelcontextprotocol/sdk` v1.27.1 |
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Find Us
|
|
269
|
+
|
|
270
|
+
| Registry | Link |
|
|
271
|
+
|:---------|:-----|
|
|
272
|
+
| **npm** | [`airtable-user-mcp`](https://www.npmjs.com/package/airtable-user-mcp) |
|
|
273
|
+
| **VS Code Marketplace** | [`Nskha.airtable-formula`](https://marketplace.visualstudio.com/items?itemName=Nskha.airtable-formula) |
|
|
274
|
+
| **GitHub** | [`Automations-Project/VSCode-Airtable-Formula`](https://github.com/Automations-Project/VSCode-Airtable-Formula) |
|
|
275
|
+
| **MCP Registry** | [`io.github.automations-project/airtable-user-mcp`](https://registry.modelcontextprotocol.io) |
|
|
276
|
+
| **Smithery** | [smithery.ai](https://smithery.ai) |
|
|
277
|
+
| **Glama** | [glama.ai/mcp/servers](https://glama.ai/mcp/servers) |
|
|
278
|
+
| **PulseMCP** | [pulsemcp.com](https://www.pulsemcp.com) |
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Related
|
|
283
|
+
|
|
284
|
+
- [**Airtable Formula** VS Code Extension](https://github.com/Automations-Project/VSCode-Airtable-Formula) — Dashboard, formula editor, MCP installer, and AI skills
|
|
285
|
+
- [Model Context Protocol](https://modelcontextprotocol.io) — The open standard for AI tool integration
|
|
286
|
+
|
|
287
|
+
## Support This Project
|
|
288
|
+
|
|
289
|
+
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.
|
|
290
|
+
|
|
291
|
+
Interested? [Open an issue](https://github.com/Automations-Project/VSCode-Airtable-Formula/issues/new) or reach out to discuss feature requests and sponsorship.
|
|
292
|
+
|
|
293
|
+
## License
|
|
294
|
+
|
|
295
|
+
[MIT](https://github.com/Automations-Project/VSCode-Airtable-Formula/blob/main/LICENSE)
|
package/package.json
CHANGED
|
@@ -1 +1,47 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"name": "airtable-user-mcp",
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"mcpName": "io.github.automations-project/airtable-user-mcp",
|
|
5
|
+
"description": "Community MCP server for Airtable. Schema inspection, field CRUD, view configuration, formula validation, and extension management. Not affiliated with Airtable Inc.",
|
|
6
|
+
"main": "src/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"airtable-user-mcp": "src/index.js"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"files": [
|
|
12
|
+
"src/**/*.js",
|
|
13
|
+
"src/**/*.mjs",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public",
|
|
19
|
+
"provenance": true
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/Automations-Project/VSCode-Airtable-Formula.git",
|
|
24
|
+
"directory": "packages/mcp-server"
|
|
25
|
+
},
|
|
26
|
+
"homepage": "https://github.com/Automations-Project/VSCode-Airtable-Formula/tree/main/packages/mcp-server#readme",
|
|
27
|
+
"bugs": "https://github.com/Automations-Project/VSCode-Airtable-Formula/issues",
|
|
28
|
+
"keywords": ["mcp", "model-context-protocol", "airtable", "mcp-server", "ai", "formula", "schema", "automation"],
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"scripts": {
|
|
31
|
+
"start": "node src/index.js",
|
|
32
|
+
"login": "node src/login.js",
|
|
33
|
+
"test": "node --test test/test-cache.js test/test-client.js test/test-tool-config.js"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
37
|
+
"cheerio": "^1.0.0",
|
|
38
|
+
"dotenv": "^16.4.5",
|
|
39
|
+
"fetch-cookie": "^3.0.1",
|
|
40
|
+
"node-fetch": "^3.3.2",
|
|
41
|
+
"tough-cookie": "^4.1.3"
|
|
42
|
+
},
|
|
43
|
+
"optionalDependencies": {
|
|
44
|
+
"otpauth": "^9.5.0",
|
|
45
|
+
"patchright": "^1.58.2"
|
|
46
|
+
}
|
|
47
|
+
}
|