Claude-skill-registry airtable-connect
Connect to any Airtable base by name. Load when user mentions 'airtable', 'connect airtable', 'setup airtable', 'query [base-name]', 'add to [table]', 'airtable bases', or any base name from persistent context. Meta-skill that discovers workspace, caches schemas, and routes to appropriate operations.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/airtable-connect" ~/.claude/skills/majiayu000-claude-skill-registry-airtable-connect && rm -rf "$T"
skills/data/airtable-connect/SKILL.md- references .env files
Airtable Connect
Meta-skill for complete Airtable workspace integration.
Purpose
Enable natural language interaction with ANY Airtable base. User says "query my Projects base" or "add a record to CRM" and it just works - no manual API calls, no remembering base IDs, no schema lookups.
Shared Resources
This skill uses
airtable-master shared library. Load references as needed:
| Resource | When to Load |
|---|---|
| Always first (pre-flight) |
| If config check fails |
| On any API errors |
| For API details |
First-Time User Setup
If user has never used Airtable integration before:
-
Run config check with JSON to detect setup state:
python 00-system/skills/airtable/airtable-master/scripts/check_airtable_config.py --json -
Parse the
field in JSON output:ai_action
→ Guide user to get PAT, add to .envprompt_for_api_key
→ Run interactive wizardrun_setup_wizard
→ Partial config, warn but continueproceed_with_warning
→ All good, continueproceed_with_operation
-
If setup needed, help user:
- Tell them: "Airtable needs a Personal Access Token (PAT)"
- Link: https://airtable.com/create/tokens
- Scopes needed:
,data.records:read
,data.records:writeschema.bases:read - Write directly to
when user provides token.env - Re-verify with config check
Setup triggers: "setup airtable", "connect airtable", "configure airtable"
Workflow 0: Config Check (ALWAYS FIRST)
Every workflow MUST start with config validation:
python 00-system/skills/airtable/airtable-master/scripts/check_airtable_config.py --json
Parse
from JSON:ai_action
: Fully configured, continueproceed_with_operation
: API works but no bases (warn user to add bases to PAT)proceed_with_warning
: Need API key, guide user through setupprompt_for_api_key
: Run setup wizardrun_setup_wizard
If not configured:
- Tell user: "Airtable integration needs to be set up first."
- Either guide them manually OR run:
python 00-system/skills/airtable/airtable-master/scripts/setup_airtable.py - Restart workflow after setup complete
Workflow 1: Discover Bases
Triggers: "connect airtable", "sync airtable", "discover bases", "what bases", "refresh airtable"
Purpose: Find all accessible bases in user's Airtable workspace and cache schemas.
Steps:
- Run config check (Workflow 0)
- Run discovery script:
python 00-system/skills/airtable/airtable-master/scripts/discover_bases.py - Script outputs:
- Number of bases found
- Base names and IDs
- Creates/updates:
01-memory/integrations/airtable-bases.yaml
- Show user summary of discovered bases
- Confirm context file saved
First-time flow: If
airtable-bases.yaml doesn't exist, discovery runs automatically.
Workflow 2: Query Records
Triggers: "query [base]", "find in [table]", "search [base]", "show [table]", "list records"
Purpose: Query any base/table by name with optional filters.
Steps:
- Run config check (Workflow 0)
- Load context: Read
01-memory/integrations/airtable-bases.yaml- If file doesn't exist → Run Workflow 1 (Discover) first
- Match base name (fuzzy):
- User says "Projects" → matches "Client Projects", "My Projects", etc.
- If multiple matches → Show disambiguation prompt
- If no match → Suggest running discovery
- Run query:
python 00-system/skills/airtable/airtable-master/scripts/query_records.py \ --base <base_id> --table <table_name> [--filter "..."] [--sort ...] [--limit N] - Format and display results using field types from cached schema
- Offer follow-up actions: "Want to add a record?" / "Query with different filters?"
Filter Syntax:
--filter "Status = Active"--filter "Priority = High"--filter "{Field} contains Design"
Workflow 3: Create Record
Triggers: "add to [table]", "create in [base]", "new [item] in [table]"
Purpose: Create a new record in any table with field validation.
Steps:
- Run config check (Workflow 0)
- Load context and match base/table (same as Workflow 2)
- Load schema for target table from context file
- Prompt user for required fields based on schema:
- Show field name + type + options (for single/multiple select)
- Validate input against field type
- Run create:
python 00-system/skills/airtable/airtable-master/scripts/manage_records.py create \ --base <base_id> --table <table_name> \ --fields '{"Name": "...", "Status": "..."}' - Confirm creation with record ID
- Offer: "Add another?" / "View in Airtable?"
Workflow 4: Update Record
Triggers: "update [record]", "edit [record]", "change [field] to [value]"
Purpose: Modify fields of an existing record.
Steps:
- Run config check (Workflow 0)
- Identify record:
- By record ID if known
- By search in table:
python query_records.py --filter "Name contains [search]"
- Show current field values
- Accept changes from user
- Run update:
python 00-system/skills/airtable/airtable-master/scripts/manage_records.py update \ --base <base_id> --table <table_name> --record <record_id> \ --fields '{"Status": "Done", "Priority": "High"}' - Confirm changes with updated record
Workflow 5: Delete Record
Triggers: "delete [record]", "remove [record]"
Purpose: Delete a record from a table.
Steps:
- Run config check (Workflow 0)
- Identify record (by ID or search)
- Confirm with user: "Are you sure you want to delete [record name]?"
- Run delete:
python 00-system/skills/airtable/airtable-master/scripts/manage_records.py delete \ --base <base_id> --table <table_name> --record <record_id> - Confirm deletion
Workflow 6: Batch Operations
Triggers: "bulk update", "update multiple", "batch create"
Purpose: Create, update, or delete multiple records at once (max 10 per batch).
Steps:
- Run config check (Workflow 0)
- Collect records to process
- Run batch operation:
python 00-system/skills/airtable/airtable-master/scripts/manage_records.py batch-create \ --base <base_id> --table <table_name> \ --records '[{"fields": {...}}, {"fields": {...}}]' - Report results (success/failure counts)
Note: Airtable limits batch operations to 10 records per request.
Context File Format
Location:
01-memory/integrations/airtable-bases.yaml
--- last_synced: 2025-12-11T12:00:00 bases: - id: "appXXXXXXXXXXXXXX" name: "Client Projects" permission_level: "create" tables: - id: "tblXXXXXXXXXXXXXX" name: "Projects" fields: - name: "Name" type: "singleLineText" - name: "Status" type: "singleSelect" options: ["Not Started", "In Progress", "Complete"] - name: "Priority" type: "singleSelect" options: ["Low", "Medium", "High"] - name: "Due Date" type: "date" - id: "appYYYYYYYYYYYYYY" name: "CRM" permission_level: "edit" tables: - id: "tblYYYYYYYYYYYYYY" name: "Contacts" fields: [...] --- # Airtable Bases Context Auto-generated by airtable-connect skill. Run "refresh airtable" to update.
Fuzzy Matching Logic
When user says a base/table name:
- Exact match: "Client Projects" → finds "Client Projects"
- Case-insensitive: "client projects" → finds "Client Projects"
- Partial match: "Projects" → finds "Client Projects", "Personal Projects"
- Word match: "crm" → finds "Sales CRM", "CRM Database"
Disambiguation prompt (if multiple matches):
Found 3 bases matching "Projects": 1. Client Projects 2. Personal Projects 3. Project Templates Which one? (enter number or be more specific)
Error Handling
| Error | Action |
|---|---|
| No bases found | Check PAT has base access at https://airtable.com/create/tokens |
| Base not in context | Run discovery: "refresh airtable" |
| Permission denied | Verify PAT has correct scopes |
| Rate limited (429) | Wait and retry with exponential backoff |
| Invalid field | Show valid options from cached schema |
Load
airtable-master/references/error-handling.md for detailed troubleshooting.
Examples
First-time setup:
User: "connect to airtable" AI: [Runs config check, detects no API key] Airtable integration needs setup. I need your Personal Access Token (PAT). Get one at: https://airtable.com/create/tokens Required scopes: data.records:read, data.records:write, schema.bases:read Paste your PAT here (starts with 'pat.'): User: pat.xxxxx... AI: [Writes to .env, re-runs config check] ✅ Connected! Found 3 bases: Client Projects, CRM, Tasks What would you like to do?
Query by name:
User: "query my Projects for active items" AI: Querying "Client Projects" → "Projects" table... Found 12 active items: 1. Website Redesign (High priority, due Jan 15) 2. Q1 Marketing Plan (Medium priority, due Jan 30) ...
Create record:
User: "add a new task to my Tasks base" AI: Creating in "Tasks" base → "Tasks" table. Required fields: - Task Name: [your input] - Status: Not Started / In Progress / Complete - Due Date: [optional, format: YYYY-MM-DD] What's the task name?
Airtable Connect v1.0 - Meta-skill for complete Airtable workspace integration