/ ディレクトリ / プレイグラウンド / airtable-mcp-server
● コミュニティ domdomegg ⚡ 即起動

airtable-mcp-server

作者 domdomegg · domdomegg/airtable-mcp-server

チャットからAirtableの読み書きが可能 — AIがアクセスできるベースを正確にスコープ指定できるきめ細かなPATで制御します。

airtable-mcp-server(domdomegg作)はコミュニティ標準のAirtable MCPです。Airtable Personal Access Tokenで認証し、レコード・テーブル・フィールド・コメント用の15以上のツールを提供します。PATスコープで読み取り専用に固定することも可能です。エンタープライズワークスペースを含むあらゆるAirtableベースで動作します。

なぜ使うのか

主な機能

ライブデモ

実際の動作

airtable.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "airtable": {
      "command": "npx",
      "args": [
        "-y",
        "airtable-mcp-server"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "airtable": {
      "command": "npx",
      "args": [
        "-y",
        "airtable-mcp-server"
      ],
      "_inferred": true
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "airtable": {
      "command": "npx",
      "args": [
        "-y",
        "airtable-mcp-server"
      ],
      "_inferred": true
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "airtable": {
      "command": "npx",
      "args": [
        "-y",
        "airtable-mcp-server"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "airtable",
      "command": "npx",
      "args": [
        "-y",
        "airtable-mcp-server"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "airtable": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "airtable-mcp-server"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add airtable -- npx -y airtable-mcp-server

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: airtable-mcp-server

Airtable CRMに対して自然言語で質問する

👤 AirtableをCRMとして使っている創業者やオペレーション担当者 ⏱ ~10 min beginner

使うタイミング: ビューを作らずに「30日以上返信がない人は?」を知りたいとき。

前提条件
  • schema.bases:read + data.records:readスコープを持つAirtable PAT — airtable.com/create/tokens/new で公開したいベースのみを選択して作成
フロー
  1. Claudeにベース一覧を取得させ、適切なベースを特定する
    Airtableのベース一覧を表示して。営業CRMっぽいものを見つけて、テーブル構成を説明して。✓ コピーしました
    → CRMベースのスキーマとテーブルの用途
  2. 本題の質問をする
    Contactsテーブルで、Last Contactedが30日以上前かつStatusがActiveの人を探して。Ownerごとにグループ化して。✓ コピーしました
    → オーナー別のフィルタ済みレコード一覧
  3. フォローアップアクションを下書きする
    各コンタクトについて、前回の会話のトーンに合わせた一行のフォローメールを下書きして。✓ コピーしました
    → コンタクトごとの下書きテキスト

結果: CRMから直接得たネクストアクションリストが2分で完成。

注意点
  • リンクレコードフィールドは名前ではなくIDを返す — Claudeに2回目のフェッチでリンクレコードを解決させるか、list_recordsでreturnFieldsByFieldId=falseを使用する
  • エンタープライズのベースではフィールド単位の権限制限があることが多い — PATのワークスペースアクセスがベースのエンタープライズポリシーと一致しているか確認する
組み合わせ: notion

Airtableレコードの一括クリーンアップ

👤 混沌としたベースを引き継いだオペレーション管理者 ⏱ ~45 min intermediate

使うタイミング: テーブルに3000行あり、大文字小文字の不統一、欠損フィールド、重複企業がある場合。

前提条件
  • data.records:writeスコープを持つPAT — トークン作成時にスコープを追加し、ベースのスコープは狭く保つ
フロー
  1. 問題を洗い出す
    Companiesテーブルで、正規化した名前による重複、Domainが未入力のレコード、Websiteがhttps://ではなくhttp://で始まるレコードを見つけて。✓ コピーしました
    → 問題ごとの件数
  2. 修正プランをドライランする
    各問題について修正案を提示し、書き込む前に3件のサンプル変更を見せて。✓ コピーしました
    → ユーザー承認ゲート付きのプレビュー
  3. 承認済みの修正を適用する
    承認。update_recordsで50件ずつバッチで修正を適用して。✓ コピーしました
    → バッチごとの成功件数

結果: 変更内容の監査可能なリスト付きのクリーンなテーブル。

注意点
  • 大量更新はAirtableのトークンごとのオートメーションクォータを消費する — 最大10リクエスト/秒でバッチ処理し、一括操作中は対象テーブルのオートメーションを一時停止する
  • 不適切な更新パターン一つで500行が台無しになる — 最初の書き込み前にテーブルのスナップショット(CSVエクスポート)を取る
組み合わせ: filesystem

Airtableをウェブサイトのヘッドレスとして使う

👤 個人開発者やコンテンツチーム ⏱ ~30 min intermediate

使うタイミング: 編集者はAirtable上で作業し、公開ロジックはエージェントに任せたいとき。

フロー
  1. 公開可能なレコードを取得する
    Blogテーブルから、Statusが'Ready'かつPublishDateが今日以前のレコードを一覧表示して。✓ コピーしました
    → 公開キュー
  2. 変換して出力する
    各レコードのリッチテキストBodyフィールドをMarkdownに変換し、/site/content/posts/<slug>.mdに書き出して。✓ コピーしました
    → ディスク上にファイルが生成される
  3. ステータスを更新する
    各レコードのStatusを'Published'に更新し、PublishedAtを現在時刻に設定して。✓ コピーしました
    → 行のステータスが更新される

結果: Airtableを信頼できる唯一の情報源としたワンコマンド公開フロー。

組み合わせ: filesystem · github

組み合わせ

他のMCPと組み合わせて10倍の力を

airtable + notion

AirtableのレポートをNotionのブリーフィングに変換する

CRMから今週の新規Dealsを取得し、/Sales配下にサマリーテーブル付きのNotionページを作成して。✓ コピーしました
airtable + filesystem

AirtableをCMSとして使い、Markdownファイルを出力する

Status=ReadyのすべてのBlogレコードについて、./content/posts/配下に.mdファイルを書き出し、レコードのステータスをPublishedに更新して。✓ コピーしました
airtable + github

Airtableのバグバックログから自動的にGitHub Issueを作成する

TriageビューでSeverity=HighのすべてのBugについて、acme/apiにタイトルと再現手順付きのGitHub Issueを作成して。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
list_bases (none) 初回のベース検出時 1 API call
list_tables baseId: str, detailLevel?: str クエリ前にベースの構造を把握する 1 API call
describe_table baseId: str, tableId: str フィルタリング前にフィールドを確認する 1 API call
list_records baseId, tableId, view?, filterByFormula?, sort?, pageSize? フィルタ・ソート付きでデータを読み取る 1 API call(ページネーション対応)
search_records baseId, tableId, searchTerm, fieldIds? フィールド横断のフリーテキスト検索 1 API call
get_record baseId, tableId, recordId 既知の単一レコードを取得する 1 API call
create_record baseId, tableId, fields レコードを1件挿入する 1 API call(書き込み)
update_records baseId, tableId, records[] バッチ更新 10レコードにつき1 API call
delete_records baseId, tableId, recordIds 破壊的操作 — 事前に確認すること 1 API call(書き込み)
create_table baseId, name, fields[] 新しいデータモデルを構築する 1 API call(スキーマ書き込み)
list_comments baseId, tableId, recordId, offset?, pageSize? スレッドの履歴を読む 1 API call

コストと制限

運用コスト

APIクォータ
ベースあたり5リクエスト/秒(Teamプラン)、Enterprise Scaleでは50リクエスト/秒
呼び出しあたりのトークン
スキーマ: 約500トークン。レコードレスポンス: フィールドにより1行あたり約200トークン。
金額
Airtable Free/Team/Enterprise — 全有料プランでAPIアクセス可能。無料プランでもAPI利用可
ヒント
pageSizeとfilterByFormulaをサーバーサイドで使用すること。テーブル全体をコンテキストに取り込むのは無駄が多い。

セキュリティ

権限、シークレット、影響範囲

最小スコープ: schema.bases:read data.records:read
認証情報の保管: きめ細かなPATを環境変数AIRTABLE_API_KEYに格納。クラシックユーザートークンは使用しないこと
データ送信先: すべての通信はHTTPS経由でapi.airtable.comに送信
絶対に付与しない: All-base access when only one base is needed webhook:manage unless required

トラブルシューティング

よくあるエラーと対処法

401 INVALID_API_KEY — PATが未設定または期限切れ

airtable.com/create/tokens でPATを再生成してください。

確認: curl -H 'Authorization: Bearer $AIRTABLE_API_KEY' https://api.airtable.com/v0/meta/bases
403 NOT_AUTHORIZED — PATに対象ベースが含まれていない

トークンのスコープ一覧を編集し、対象ベースを追加してください。

確認: curl returns bases you expect
422 INVALID_REQUEST_UNKNOWN_FIELD — フィールド名がスキーマと不一致

テーブルを再度describeしてください。Airtableではフィールド名変更時にフィールドIDが変わることがあります。

確認: call describe_table again
429 rate limit — レート制限に到達

ベースあたり5リクエスト/秒に抑え、書き込み操作はバッチ化してください。

確認: retry after 30s

代替案

airtable-mcp-server 他との比較

代替案代わりに使う場面トレードオフ
Notion MCPチームがAirtableではなくNotionデータベースを主に使っている場合Notionは表形式に弱く、大量データの一括操作には不向き
Google Sheets MCPデータがGoogle Sheetsにある場合構造化スキーマやリンクレコードの機能がない
Direct Airtable REST via fetch MCP単発のAPI呼び出しだけで別のMCPを導入したくない場合すべてのURLを手動で組み立てる必要がある

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る