AirtableでAIを強化する | 第1章：AirtableとMCPの基礎

## はじめに

**Airtable**は、表計算のシンプルさとデータベースの柔軟性を組み合わせたクラウドベースのプラットフォームです。プロジェクト管理、CRM、イベント企画など、さまざまな用途で使われています。一方、**Model Context Protocol（MCP）**は、AI（例：Claude）を外部データやツールと標準化された方法で接続するプロトコルです。このシリーズでは、AirtableとMCPを統合し、データ管理を強化するエージェントAIを構築する方法を学びます。たとえば、プロジェクトデータをAIが取得して要約したり、タスクを自動化したりできます。

第1章では、AirtableとMCPの基本を理解し、Airtableからデータを取得するシンプルなMCPサーバーを構築します。Claude Desktopと接続して、データ管理の第一歩を踏み出しましょう。AirtableとAIの可能性にワクワクしている方は、ぜひ一緒に始めましょう！

## AirtableとMCPの概要

### Airtableとは？
Airtableは、以下のような特徴を持つデータ管理ツールです：
- **直感的なUI**：スプレッドシートのようなインターフェースで簡単にデータ管理。
- **強力なAPI**：REST APIでデータ取得や操作が可能。
- **カスタマイズ性**：テンプレートやビューで多様なニーズに対応。
- **コラボレーション**：チームでのリアルタイム共同作業をサポート。

### MCPの役割
MCPは、AIにAirtableのデータを提供する橋渡し役です。MCPサーバーを通じて、AIは以下を行えます：
- **データ取得**：Airtableのテーブルからプロジェクトやタスク情報を取得。
- **アクション実行**：新しいレコードを追加、データを更新。
- **自動化**：データに基づいてタスクや通知を生成。

### なぜAirtableとMCPを組み合わせる？
この組み合わせは、以下のようなシナリオで強力です：
- プロジェクト管理：AIがAirtableのタスクデータを分析し、進捗を報告。
- イベント企画：AIがスケジュールや参加者リストを整理。
- CRM：AIが顧客データを基にフォローアップを提案。

## 開発環境の準備

MCPサーバーとAirtableを統合するには、以下の環境を準備します：
- **Python 3.8以降**：サーバー開発用。
- **mcpライブラリ**：JSON-RPC通信を処理（仮定のライブラリ、公式ドキュメントを参照）。
- **pyairtableライブラリ**：Airtable APIとの通信用。
- **Claude Desktop**：MCP対応のAIクライアント。
- **テキストエディタ**：VS Code推奨。

インストールコマンド：
```bash
pip install mcp jsonrpcserver pyairtable python-dotenv
```

### Airtableのセットアップ
1. **プロジェクト作成**：
   - [Airtable](https://airtable.com)にアクセスし、新しいベースを作成（例：`MCP-Projects`）。
   - テーブルを作成（例：`Projects`）し、以下のフィールドを追加：
     - `Name`（テキスト）：プロジェクト名
     - `Description`（長編テキスト）：説明
     - `Created At`（日付）：作成日
   - テストデータを入力：
     | Name           | Description             | Created At   |
     |----------------|-------------------------|--------------|
     | プロジェクトA | MCP統合テスト           | 2025-04-15   |
     | プロジェクトB | AI自動化プロジェクト     | 2025-04-16   |
2. **APIキーの取得**：
   - Airtableアカウント設定でPersonal Access Tokenを作成。
   - スコープ：`data.records:read`を選択。
   - トークンとベースID、テーブル名を記録。
3. **環境変数の設定**：
   `.env`ファイルに以下を追加：
   ```bash
   AIRTABLE_TOKEN=your_airtable_token
   AIRTABLE_BASE_ID=your_base_id
   AIRTABLE_TABLE_NAME=Projects
   ```

## コード例：Airtable用MCPサーバー

Airtableの`Projects`テーブルからデータを取得するMCPサーバーを構築します。

```python
from mcp import MCPServer
from pyairtable import Table
import os
from dotenv import load_dotenv

class AirtableServer(MCPServer):
    def __init__(self, host, port, airtable_token, base_id, table_name):
        super().__init__(host, port)
        self.table = Table(airtable_token, base_id, table_name)
        self.register_resource("get_projects", self.get_projects)

    def get_projects(self, params):
        try:
            records = self.table.all()
            projects = [
                {
                    "id": record["id"],
                    "name": record["fields"].get("Name", ""),
                    "description": record["fields"].get("Description", ""),
                    "created_at": record["fields"].get("Created At", "")
                }
                for record in records
            ]
            return {"status": "success", "projects": projects}
        except Exception as e:
            return {"status": "error", "message": str(e)}

if __name__ == "__main__":
    load_dotenv()
    server = AirtableServer(
        host="localhost",
        port=8099,
        airtable_token=os.getenv("AIRTABLE_TOKEN"),
        base_id=os.getenv("AIRTABLE_BASE_ID"),
        table_name=os.getenv("AIRTABLE_TABLE_NAME")
    )
    print("Airtable MCPサーバーを起動中: http://localhost:8099")
    server.start()
```

### コードの説明
- **Table**：`pyairtable`を使ってAirtableテーブルに接続。
- **get_projects**：`Projects`テーブルから全レコードを取得し、ID、名前、説明、作成日をフォーマット。
- **register_resource**：リソースを登録し、AIがアクセス可能に。
- **start()**：サーバーを起動。

### 前提条件
- Airtableベースに`Projects`テーブルが存在。
- `.env`ファイルに正しい`AIRTABLE_TOKEN`、`AIRTABLE_BASE_ID`、`AIRTABLE_TABLE_NAME`が設定済み。

## サーバーのテスト

サーバーが正しく動作するか確認します：

1. **サーバー起動**：
   ```bash
   python airtable_server.py
   ```
   コンソールに「Airtable MCPサーバーを起動中: http://localhost:8099」と表示。

2. **データ取得のテスト**：
   Pythonでリクエストを送信：
   ```python
   import requests
   import json

   url = "http://localhost:8099"
   payload = {
       "jsonrpc": "2.0",
       "method": "get_projects",
       "params": {},
       "id": 1
   }
   response = requests.post(url, json=payload)
   print(json.dumps(response.json(), indent=2, ensure_ascii=False))
   ```
   期待されるレスポンス：
   ```json
   {
     "jsonrpc": "2.0",
     "result": {
       "status": "success",
       "projects": [
         {
           "id": "rec123",
           "name": "プロジェクトA",
           "description": "MCP統合テスト",
           "created_at": "2025-04-15"
         },
         {
           "id": "rec456",
           "name": "プロジェクトB",
           "description": "AI自動化プロジェクト",
           "created_at": "2025-04-16"
         }
       ]
     },
     "id": 1
   }
   ```

## Claude Desktopとの接続

サーバーをClaude Desktopに接続します：

1. **設定ファイルの編集**：
   Claude Desktopの設定ファイル（例：`claude_desktop_config.json`）に以下を追加：
   ```json
   {
     "mcp_servers": [
       {
         "name": "AirtableServer",
         "url": "http://localhost:8099",
         "auth": "none"
       }
     ]
   }
   ```

2. **Claudeでテスト**：
   Claude Desktopを起動し、プロンプトを入力：
   ```
   プロジェクト一覧を教えてください。
   ```
   レスポンス例：
   ```
   Airtableから取得したプロジェクト：
   - プロジェクトA：MCP統合テスト（2025-04-15）
   - プロジェクトB：AI自動化プロジェクト（2025-04-16）
   ```

## 次のステップ

このMCPサーバーは、AirtableとAIの連携の基礎です。次の第2章では、Airtableにレコードを追加・更新する機能を実装し、タスク管理を自動化するエージェントを構築します。たとえば、AIが新しいタスクをAirtableに追加したり、ステータスを更新したりできます。Airtableの自動化に興味がある方は、ぜひお楽しみに！

## まとめ

この第1章では、AirtableとMCPの基本を学び、シンプルなMCPサーバーを構築してプロジェクトデータを取得しました。Airtableの柔軟なデータ管理とMCPの標準化された接続を組み合わせることで、AIを強力なデータアシスタントに変えられます。次章以降では、タスク自動化、データ分析、イベント管理へと進化させます。

---

役に立ったと思ったら、「いいね」や「ストック」をしていただけると嬉しいです！次の章でまたお会いしましょう！