Claude-skill-registry airtable-master

Shared resource library for Airtable integration skills. DO NOT load directly - provides common references (setup, API docs, error handling, field types) and scripts used by airtable-connect, airtable-query, and airtable-sync.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
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-master" ~/.claude/skills/majiayu000-claude-skill-registry-airtable-master && rm -rf "$T"
manifest: skills/data/airtable-master/SKILL.md
safety · automated scan (low risk)
This is a pattern-based risk scan, not a security review. Our crawler flagged:
  • references .env files
  • references API keys
Always read a skill's source content before installing. Patterns alone don't mean the skill is malicious — but they warrant attention.
source content

Airtable Master

This is NOT a user-facing skill. It's a shared resource library.

Purpose

Provides shared resources to eliminate duplication across:

  • airtable-connect
    - Connect to bases, discover schema
  • airtable-query
    - Query records with filters
  • airtable-sync
    - Import/export records

Instead of loading this skill, users invoke the specific skill above.


Architecture: DRY Principle

Problem solved: Multiple Airtable skills would have duplicated content (setup instructions, API docs, error handling).

Solution: Extract shared content into

references/
and
scripts/
.

Result: Single source of truth, reduced context per skill.


Shared Resources

references/

setup-guide.md - Complete setup wizard

  • Creating Personal Access Token (PAT)
  • Configuring .env file
  • Selecting scopes
  • Validation steps

api-reference.md - API patterns

  • Base URL and headers
  • Key endpoints (bases, tables, records)
  • Pagination
  • Batch operations
  • Rate limits

error-handling.md - Troubleshooting

  • HTTP error codes (401, 403, 404, 422, 429)
  • Recovery patterns
  • Debugging tips

field-types.md - Field type reference

  • All 20+ Airtable field types
  • Read and write formats
  • Type-specific validation

scripts/

Configuration & Setup

check_airtable_config.py - Pre-flight validation

python check_airtable_config.py [--verbose] [--json]
ArgumentRequiredDefaultDescription
--verbose
/
-v
NoFalseShow detailed output
--json
NoFalseOutput structured JSON for AI consumption

Exit codes: 0=configured, 1=partial (no bases), 2=not configured

When to Use: Run this FIRST before any Airtable operation. Use to validate PAT is configured, test API connection, check base access, or diagnose authentication issues.


setup_airtable.py - Interactive setup wizard

python setup_airtable.py [--non-interactive] [--api-key KEY]
ArgumentRequiredDefaultDescription
--non-interactive
NoFalseSkip prompts (requires API key)
--api-key
No-API key for non-interactive mode

Default: Runs interactively. Guides through PAT creation, tests connection, saves to

.env
, auto-runs base discovery.

When to Use: Use when Airtable integration needs initial setup, when check_airtable_config.py returns exit code 2, or when user needs to reconfigure credentials or switch workspaces.


discover_bases.py - Base discovery (GET /meta/bases)

python discover_bases.py [--refresh] [--json] [--with-schema]
ArgumentRequiredDefaultDescription
--refresh
NoFalseForce re-discovery even if cache exists
--json
NoFalseOutput as JSON only (no progress messages)
--with-schema
NoFalseAlso fetch table schemas (slower)

Saves to:

01-memory/integrations/airtable-bases.yaml

When to Use: Use when user asks "what bases do I have", "list my airtable bases", "show tables", after adding new bases, or when base/table name resolution fails (--refresh to update cache).


Record Operations

query_records.py - Query records from table (GET /{baseId}/{tableIdOrName})

python query_records.py --base BASE --table TABLE [--filter FORMULA] [--fields FIELDS] [--view VIEW] [--sort FIELD] [--limit N] [--json] [--verbose]
ArgumentRequiredDefaultDescription
--base
Yes-Base ID (appXXX) or name
--table
Yes-Table ID (tblXXX) or name
--filter
No-Airtable formula filter
--fields
No-Comma-separated field names to retrieve
--view
No-View ID or name
--sort
No-Sort field (prefix with
-
for descending)
--limit
No-Max records to return
--json
NoFalseOutput as JSON
--verbose
/
-v
NoFalseShow debug info

Filter Formula Examples:

--filter "{Status}='Active'"
--filter "AND({Status}='Active', {Priority}='High')"
--filter "SEARCH('john', LOWER({Name}))"
--filter "{Due Date} < TODAY()"

When to Use: Use when user wants to read records from a table, search with filters, list data from Airtable, or retrieve specific records. Supports Airtable formula syntax for complex filters.


manage_records.py - CRUD operations (POST/PATCH/PUT/DELETE /{baseId}/{tableIdOrName})

# Create record(s)
python manage_records.py create --base BASE --table TABLE --data JSON [--file FILE] [--typecast] [--json] [--verbose]

# Update record(s)
python manage_records.py update --base BASE --table TABLE --record RECID --data JSON [--file FILE] [--typecast] [--replace] [--json] [--verbose]

# Delete record(s)
python manage_records.py delete --base BASE --table TABLE --record RECID [--file FILE] [--json] [--verbose]
ArgumentRequiredDefaultDescription
action
Yes-Action:
create
,
update
,
delete
(positional)
--base
Yes-Base ID (appXXX) or name
--table
Yes-Table ID (tblXXX) or name
--record
No*-Record ID (for update/delete single record)
--data
No*-JSON data for fields
--file
No*-JSON file with record(s) data
--typecast
NoFalseEnable automatic type conversion
--replace
NoFalseReplace mode for update (PUT vs PATCH)
--json
NoFalseOutput as JSON
--verbose
/
-v
NoFalseShow debug info

*For create:

--data
or
--file
required *For update:
--record
+
--data
or
--file
required *For delete:
--record
or
--file
required

Usage Examples:

# Create a single record
python manage_records.py create --base "My CRM" --table "Contacts" \
    --data '{"Name": "John Doe", "Email": "john@example.com"}'

# Create multiple records from file
python manage_records.py create --base appXXX --table tblYYY --file records.json

# Update a record
python manage_records.py update --base "Tasks" --table "Tasks" \
    --record recXXX --data '{"Status": "Done"}'

# Delete a record
python manage_records.py delete --base "Tasks" --table "Tasks" --record recXXX

# Batch operations with typecast
python manage_records.py create --base "CRM" --table "Leads" \
    --file leads.json --typecast

Batch Limits: Max 10 records per API call (script handles batching automatically)

When to Use: Use

create
when user wants to add new records,
update
to modify existing records (PATCH=partial, PUT=replace),
delete
to remove records. Supports batch operations from JSON files.


Intelligent Error Detection Flow

When an Airtable skill fails due to missing configuration, the AI should:

Step 1: Run Config Check with JSON Output

python 00-system/skills/airtable/airtable-master/scripts/check_airtable_config.py --json

Step 2: Parse the
ai_action
Field

The JSON output includes an

ai_action
field that tells the AI what to do:

ai_actionWhat to Do
proceed_with_operation
Config OK, continue with the original operation
proceed_with_warning
Partial config (API works but no bases accessible)
prompt_for_api_key
Ask user: "I need your Airtable API key. Get one at https://airtable.com/create/tokens"
run_setup_wizard
Run:
python 00-system/skills/airtable/airtable-master/scripts/setup_airtable.py

Step 3: Help User Fix Issues

If

ai_action
is
prompt_for_api_key
:

  1. Tell user: "Airtable integration needs setup. I need your Personal Access Token (PAT)."
  2. Show them: "Get one at: https://airtable.com/create/tokens"
  3. Guide them through scopes: "Add scopes: data.records:read, data.records:write, schema.bases:read"
  4. Ask: "Paste your Airtable PAT here (starts with 'pat.'):"
  5. Once they provide it, write directly to
    .env
    :
    # Edit .env file to add:
    AIRTABLE_API_KEY=pat.their_token_here
    
  6. Re-run config check to verify

JSON Output Structure

{
  "status": "not_configured",
  "exit_code": 2,
  "ai_action": "prompt_for_api_key",
  "missing": [
    {"item": "AIRTABLE_API_KEY", "required": true, "location": ".env"}
  ],
  "fix_instructions": [...],
  "env_template": "AIRTABLE_API_KEY=pat.YOUR_TOKEN_HERE",
  "setup_wizard": "python 00-system/skills/airtable/airtable-master/scripts/setup_airtable.py"
}

How Skills Reference This

Each skill loads shared resources only when needed (progressive disclosure):

airtable-connect uses:

  • check_airtable_config.py
    (validate before connection)
  • discover_bases.py
    (find and cache bases)
  • api-reference.md
    (schema endpoints)
  • error-handling.md
    (troubleshooting)

airtable-query uses:

  • check_airtable_config.py
    (validate before query)
  • query_records.py
    (list/filter records)
  • api-reference.md
    (query patterns)
  • field-types.md
    (interpret results)

airtable-sync uses:

  • check_airtable_config.py
    (validate before sync)
  • manage_records.py
    (CRUD operations)
  • api-reference.md
    (batch patterns)
  • error-handling.md
    (recovery)

Usage Example

User says: "query my Projects base in Airtable"

What happens:

  1. AI loads
    airtable-connect
    (NOT airtable-master)
  2. airtable-connect
    SKILL.md says: "Run check_airtable_config.py first"
  3. AI executes:
    python 00-system/skills/airtable/airtable-master/scripts/check_airtable_config.py --json
  4. If exit code 2, AI prompts user for API key and helps them set up
  5. If exit code 0, AI executes:
    python 00-system/skills/airtable/airtable-master/scripts/query_records.py --base "Projects"
  6. If errors occur, AI loads:
    airtable-master/references/error-handling.md

airtable-master is NEVER loaded directly - it's just a resource library.


Key Differences from Notion

AspectAirtableNotion
AuthPersonal Access Token (PAT)Integration Token
Rate Limit5 req/s per base3 req/s
Batch Size10 recordsVariable
PaginationOffset-basedCursor-based
Field Types20+ types20+ property types

Version: 1.3 Created: 2025-12-11 Updated: 2025-12-11 Status: Production Ready

Changelog:

  • v1.3: Added "When to Use" sections to all 5 scripts for AI routing guidance
  • v1.2: Added comprehensive script argument documentation with usage examples and argument tables
  • v1.1: Added Intelligent Error Detection Flow with
    --json
    support, added setup_airtable.py
  • v1.0: Initial release