airtable-cli
Lists bases, reads and writes records, manages tables and fields, filters and searches data in Airtable via the `airtable-mcp` CLI. Use when the task involves Airtable data or the user mentions airtable-mcp, bases, tables, records, or fields.
What this skill does
# airtable-mcp
## Self-discovery
Tools are fetched from the MCP server at runtime, so the CLI never has a hardcoded command list. Discover what's available:
```sh
airtable-mcp tools # human-readable list
airtable-mcp tools --json # machine-parseable list
airtable-mcp <tool> --help # show flags and descriptions for a tool
```
Run `airtable-mcp tools` before assuming a tool exists. Tool names, arguments, and output shapes can change between server releases without a CLI update.
## Install
```sh
npm install -g @airtable/mcp-cli
```
## Auth
The CLI needs an Airtable personal access token (PAT). Two paths:
**Environment variable (preferred for scripts/agents):**
```sh
export AIRTABLE_TOKEN=pat_xxx
```
**Interactive configure (stores token in `~/.airtable/cli.json` with 0600 permissions):**
```sh
airtable-mcp configure
```
Create tokens at https://airtable.com/create/tokens. Ensure the token has the scopes required by the tools being called.
`AIRTABLE_TOKEN` takes precedence over saved profiles when no `--profile` flag is set. Never log or echo tokens.
## Quick reference
| Task | Command |
| ---------------------- | ------------------------------------------------------- |
| Set up credentials | `airtable-mcp configure` |
| Add a named profile | `airtable-mcp configure --profile work` |
| Check auth status | `airtable-mcp whoami` |
| Remove credentials | `airtable-mcp logout` |
| Remove all profiles | `airtable-mcp logout --all` |
| List available tools | `airtable-mcp tools` |
| Run a tool | `airtable-mcp <tool> --flagName value` |
| Get tool help | `airtable-mcp <tool> --help` |
| Pass args via stdin | `echo '{"key":"val"}' \| airtable-mcp <tool> --input -` |
| Bypass tool cache | `airtable-mcp <tool> --refresh` |
| Suppress status msgs | `airtable-mcp <tool> -q` |
| Raw text output | `airtable-mcp <tool> --output raw` |
| Use a specific profile | `airtable-mcp <tool> --profile work` |
Tool names use hyphens on the CLI (`list-records`) but underscores in MCP (`list_records`). The CLI translates automatically.
## Workflow
1. **Auth** — set `AIRTABLE_TOKEN` or run `airtable-mcp configure`
2. **Discover** — run `airtable-mcp tools` to see available tools
3. **Inspect** — run `airtable-mcp <tool> --help` for flags and descriptions
4. **Check access** — in `tools --json` output, check the `access` field: `read-only`, `write`, or `destructive`. Confirm with the user before running `destructive` tools.
5. **Execute** — run `airtable-mcp <tool> --flagName value`
## Output & automation
- Default output is formatted JSON to stdout. Status messages go to stderr.
- `--json` on `tools` gives a JSON array of `{name, title, access}`.
- `-q` / `--quiet` suppresses stderr status messages (cache warnings, etc).
- `--output raw` returns the raw server response text instead of parsed JSON.
- `--input -` reads tool arguments as a JSON object from stdin, bypassing flag parsing.
- Exit codes: `0` success, `1` error (auth, tool failure, not found), `2` usage error (bad flags, bad input).
## Common tasks
**Find a base and list its tables:**
```sh
airtable-mcp search-bases --searchQuery "Project Tracker" -q
airtable-mcp list-tables-for-base --baseId appK9MtBqFw3o5jGN -q
```
**List records with specific fields:**
```sh
airtable-mcp list-records-for-table \
--baseId appK9MtBqFw3o5jGN --tableId tblL4GpTfEz8byRsW \
--fieldIds '["Name","Status"]' --pageSize 10 -q
```
**Filter records** — filters use structured JSON, not formula strings. Wrap conditions in an `operands` array; the top-level `operator` defaults to `and` if omitted:
```sh
airtable-mcp list-records-for-table \
--baseId appK9MtBqFw3o5jGN --tableId tblL4GpTfEz8byRsW \
--filters '{"operator":"and","operands":[{"operator":"=","operands":["Status","Done"]}]}' -q
```
For select fields, filter by choice ID (from `get-table-schema`), not the display name. The `airtable-filters` skill covers compound filters, date filters, and operator-by-field-type details.
**Search records** — use `search-records` for free-text/fuzzy queries on large tables. Use `list-records-for-table` with `--filters` when filtering by exact field values:
```sh
airtable-mcp search-records \
--baseId appK9MtBqFw3o5jGN --table tblL4GpTfEz8byRsW \
--query "acme" --fields '["Name","Notes"]' -q
```
Pass `--fields ALL_SEARCHABLE_FIELDS` to search across every indexed field. Date, rating, checkbox, and button fields are not searchable.
**Update records** — complex args are easier via `--input -`:
```sh
echo '{"baseId":"appK9MtBqFw3o5jGN","tableId":"tblL4GpTfEz8byRsW","records":[{"id":"recVnR3xPq8sD2yLk","fields":{"fld8WsrpLHHevsnW8":"Done"}}]}' \
| airtable-mcp update-records-for-table --input - -q
```
Select field values are returned as objects (`{"id":"sel...","name":"Done"}`) but must be written as plain strings (`"Done"`). Record field keys in create/update currently require field IDs (`fldXXX`) — use `get-table-schema` to resolve names to IDs before writing. Note that `fieldIds`, `sort`, and `filters` accept both names and IDs.
## Gotchas
| Problem | Cause | Fix |
| -------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------ |
| `Unknown tool: X` | Tool name doesn't exist on the server or cache is stale | Run `airtable-mcp tools --refresh` to refresh, then retry |
| `Authentication failed` | Token expired, revoked, or wrong | Run `airtable-mcp configure` or check `AIRTABLE_TOKEN` |
| `Access denied` | Token missing required scopes | Add scopes at https://airtable.com/create/tokens |
| `Connection timed out` | Server unreachable (10s timeout) | Check network; CLI falls back to stale cache if available |
| Boolean flags take no value | `--dryRun true` passes `"true"` as next arg | Use `--dryRun` alone (booleans are presence-based) |
| Array/object args fail | Value isn't valid JSON | Pass as JSON string: `--fieldMappings '{"a":"b"}'` |
| Filter rejected at top level | Single condition passed without `operands` wrapper | Wrap in `{"operands":[...]}` (`operator` defaults to `and`) |
| Sort key is `fieldId` not `field` | `--sort '[{"field":"Name"}]'` silently ignored | Use `{"fieldId":"Name","direction":"asc"}` — accepts field IDs or names |
| Select filter returns no matches | Filtering by display name instead of choice ID | Run `get-table-schema` first to get `sel...` choice IDs |
| `INVALID_RECORDS` on batch write | Batch limit is 10 records per request (default; varies by account) | Split into chunks of ≤10 and check `<tool> --help` for the current limit |
| Permission error on `list-records-for-table` | User has interface-only access to the base | Use `list-records-forRelated in AI Agents
skill-development
IncludedComprehensive meta-skill for creating, managing, validating, auditing, and distributing Claude Code skills and slash commands (unified in v2.1.3+). Provides skill templates, creation workflows, validation patterns, audit checklists, naming conventions, YAML frontmatter guidance, progressive disclosure examples, and best practices lookup. Use when creating new skills, validating existing skills, auditing skill quality, understanding skill architecture, needing skill templates, learning about YAML frontmatter requirements, progressive disclosure patterns, tool restrictions (allowed-tools), skill composition, skill naming conventions, troubleshooting skill activation issues, creating custom slash commands, configuring command frontmatter, using command arguments ($ARGUMENTS, $1, $2), bash execution in commands, file references in commands, command namespacing, plugin commands, MCP slash commands, Skill tool configuration, or deciding between skills vs slash commands. Delegates to docs-management skill for official documentation.
reprompter
IncludedTransform messy prompts into well-structured, effective prompts — single or multi-agent. Use when: "reprompt", "reprompt this", "clean up this prompt", "structure my prompt", rough text needing XML tags and best practices, "reprompter teams", "repromptception", "run with quality", "smart run", "smart agents", multi-agent tasks, audits, parallel work, anything going to agent teams. Don't use when: simple Q&A, pure chat, immediate execution-only tasks. See "Don't Use When" section for details. Outputs: Structured XML/Markdown prompt, quality score (before/after), optional team brief + per-agent sub-prompts, agent team output files. Success criteria: Single mode quality score ≥ 7/10; Repromptception per-agent prompt quality score 8+/10; all required sections present, actionable and specific.
adaptive-compaction
IncludedAdaptive add-on policy and recovery layer that decides WHEN to compact, prune, snapshot, or fork -- replacing fixed-percent auto-compaction across Claude Code, Codex, and MCP-capable hosts. Trigger on auto-compact timing or damage: "when should I compact", "is it safe to compact now or start a fresh session", "auto-compact fires too early/mid-task", "switching to an unrelated task but the window still has space", "context rot", "answers get worse the longer the session runs", "the agent forgot the plan or my decisions after it summarized", "add a layer on top that manages context without changing the agent", raising autoCompactWindow to give the policy room, or installing/tuning a cross-tool compaction policy or PreCompact hook -- even when "compaction" is never said but the problem is context-window pressure or post-summarization memory loss. Do NOT use to summarize a conversation, build RAG, write a summarization prompt (decides WHEN not HOW), or answer max-context-length trivia.
agent-skill-creator
IncludedCreate cross-platform agent skills from workflow descriptions. Activates when users ask to create an agent, automate a repetitive workflow, create a custom skill, or need advanced agent creation. Triggers on phrases like create agent for, automate workflow, create skill for, every day I have to, daily I need to, turn process into agent, need to automate, create a cross-platform skill, validate this skill, export this skill, migrate this skill. Supports single skills, multi-agent suites, transcript processing, template-based creation, interactive configuration, cross-platform export, and spec validation.
llm-wiki
IncludedUse when building or maintaining a persistent personal knowledge base (second brain) in Obsidian where an LLM incrementally ingests sources, updates entity/concept pages, maintains cross-references, and keeps a synthesis current. Triggers include "second brain", "Obsidian wiki", "personal knowledge management", "ingest this paper/article/book", "build a research wiki", "compound knowledge", "Memex", or whenever the user wants knowledge to accumulate across sessions instead of being re-derived by RAG on every query.
skill-master
IncludedAgent Skills authoring, evaluation, and optimization. Create, edit, validate, benchmark, and improve skills following the agentskills.io specification. Use when designing SKILL.md files, structuring skill folders (references, scripts, assets), ingesting external documentation into skills, running trigger evals, benchmarking skill quality, optimizing descriptions, or performing blind A/B comparisons. Keywords: agentskills.io, SKILL.md, skill authoring, eval, benchmark, trigger optimization.