# EMQXエージェントをSupabaseに接続する

Supabaseコネクターを使用すると、EMQXエージェントがデータベーステーブルのクエリ実行、SQLの実行、テーブルスキーマの確認、エッジ関数の一覧表示および呼び出しを行えます。これにより、アプリケーションデータやサーバレス関数をEMQXエージェントのワークフローと組み合わせて利用できます。

## よくあるユースケース

- MQTTデバイスイベントに関連するアプリケーションレコードの読み取り。
- クエリ生成前にテーブルスキーマを確認。
- SQLを通じてワークフローの結果をデータベーステーブルに書き込む。
- エージェントがイベントを検証した後にエッジ関数を呼び出す。

チャットプロンプトの例：

```text
app-supabaseコネクターを使って利用可能なテーブルを一覧表示し、device_alertsのスキーマを確認し、直近の5件の重大なアラートをクエリしてください。
```

## 前提条件

コネクターを追加する前に、以下を準備してください：

- 必要な組織およびプロジェクトにアクセスできるSupabaseアカウント、または認証時にそれらを作成する権限。
- データベースおよびエッジ関数操作の認可権限。
- ワークフローで必要なテーブルおよびSQL操作に対するデータベース権限。

## Supabaseコネクターの追加方法

1. 左側のナビゲーションメニューで **Connectors** をクリックします。
2. **Available** タブで **Supabase** を見つけて **Add** をクリックします。
3. 説明的なコネクター名を入力します。
4. **Confirm** をクリックすると、Supabaseの認証フローがダイアログで開きます。
5. **Base URL** は、セルフホスト型Supabaseを使用しない限り、デフォルトの `https://api.supabase.com` のままにします。
6. **Connect Account** をクリックします。
7. Supabaseにサインインします。GitHub、SSO、メールとパスワードなどの利用可能なサインイン方法を選択してください。Supabaseアカウントをお持ちでない場合は、**Sign up** をクリックして作成してください。
8. GitHubでサインインした場合は、アクセス要求を確認し、**Authorize supabase** をクリックします。

すでにSupabaseの組織とプロジェクトをお持ちの場合は、[Composioの認可](#authorize-composio)に進んでください。そうでない場合は、認可を完了する前に作成してください。

### 必要に応じてSupabaseの組織とプロジェクトを作成する

1. Supabaseが利用可能な組織がないと報告した場合は、**Create an organization** をクリックします。
2. **Create a new organization** ページで、組織の **Name** を入力し、**Type** と **Plan** を選択して、**Create organization** をクリックします。
3. **Create a new project** ページで組織を選択します。必要に応じてGitHubを接続します。
4. **Project name** と強力な **Database password** を入力します。
5. **Region** を選択します。
6. **Enable Data API**、**Automatically expose new tables**、**Enable automatic RLS** などのセキュリティ設定を確認します。
7. **Create new project** をクリックします。

### Composioの認可

1. **Authorize Composio** ページに戻り、接続する組織を選択します。
2. 選択した組織に対する読み取りおよび書き込みアクセス（データベース、シークレット、認証、エッジ関数、環境、プロジェクト、ドメイン、PostgREST、分析、ストレージなど）を確認します。
3. **Authorize Composio** をクリックします。
4. 成功メッセージが表示されるまで待ち、EMQXエージェントに戻ります。
5. **Added** タブでコネクターのステータスが **Authorized** であることを確認します。

<!-- TODO: Supabase認可が個別プロジェクトに制限可能か、コネクターが使用するデータベースロール、Row Level Securityの挙動、書き込みSQLやエッジ関数呼び出しがアクションごとの承認を必要とするかを確認する。 -->

## サポートされるツール

### データベース

| ツール | アクセス | 説明 |
|---|---|---|
| `SUPABASE_BETA_RUN_SQL_QUERY` | 書き込み | SupabaseプロジェクトのデータベースでSQLクエリを実行します。 |
| `SUPABASE_RUN_READ_ONLY_QUERY` | 読み取り | 読み取り専用のSQLクエリを実行します。 |
| `SUPABASE_SELECT_FROM_TABLE` | 読み取り | 選択したデータベーステーブルから行をクエリします。 |
| `SUPABASE_GET_TABLE_SCHEMAS` | 読み取り | データベーステーブルのスキーマを取得します。 |
| `SUPABASE_LIST_TABLES` | 読み取り | データベース内のテーブルを一覧表示します。 |

### エッジ関数

| ツール | アクセス | 説明 |
|---|---|---|
| `SUPABASE_GET_FUNCTION` | 読み取り | エッジ関数の詳細を取得します。 |
| `SUPABASE_INVOKE_EDGE_FUNCTION` | 書き込み | エッジ関数を呼び出します。 |
| `SUPABASE_LIST_FUNCTIONS` | 読み取り | プロジェクト内のエッジ関数を一覧表示します。 |

::: warning 重要なお知らせ
書き込み可能なSQLツールは、認可されたロールが許可する場合、データベースのデータを変更または削除する可能性があります。書き込みを必要としないワークフローには、読み取り専用クエリと最小権限のデータベースアクセスを使用してください。
:::

## チャットでのコネクターの使用方法

1. チャット入力欄でコネクターアイコンをクリックします。
2. 認可済みの **Supabase** コネクターを選択します。
3. プロンプトに、エージェントが使用すべき外部リソースと操作を指定します。
4. 生成されたエージェント定義を確認し、必要なツールのみが含まれていることを確認します。

## 権限とデータアクセス

コネクターは認可されたSupabase組織およびアカウントの権限を使用します。データベースロール、Row Level Securityポリシー、テーブル権限、エッジ関数の認可がアクセス可能なデータおよび操作を決定します。

チャットプロンプトやエージェント指示に外部サービスの認証情報やアクセストークンを含めないでください。

## 制限事項

- SupabaseのAPIおよびデータベースの制限が適用されます。
- Row Level Securityによりクエリ結果や書き込み操作が制限される場合があります。
- エッジ関数の利用可能性および動作は、選択したプロジェクトと関数の設定に依存します。

<!-- TODO: サービス固有の結果サイズ制限、ファイル制限、APIレート制限、プラン制限、非対応リソースタイプを確認する。 -->

## トラブルシューティング

| 症状 | 解決策 |
|---|---|
| コネクターが **Unauthorized** のままになる。 | 認可を再試行し、**Base URL** を確認し、Supabaseにサインインして組織を選択し、**Authorize Composio** をクリックしてください。 |
| 認可ページで利用可能な組織がないと報告される。 | **Create an organization** をクリックし、必要に応じてプロジェクトを作成してから認可ページに戻ってください。 |
| ツールが権限エラーを返す。 | 認可されたアカウントが選択した組織、対象プロジェクト、リソース、操作にアクセスできるか確認してください。 |
| 必要なツールが利用できない。 | ツールがこのコネクターでサポートおよび承認されているか確認し、チャットで再度コネクターを選択してください。 |
| リクエストが断続的に拒否される。 | 外部サービスのステータス、APIクォータ、レート制限、アカウントプランを確認してください。 |

## 関連リンク

- [Connectors](../connectors.md)
- [Start a Chat](../chats.md)
- [Manage Agents](../agents.md)
