Supabase MCP サーバー
Supabaseのデータベース、ストレージ、エッジ機能と連携するための包括的なツールを提供するModel Context Protocol(MCP)サーバー。このサーバーは、SupabaseサービスとMCP対応アプリケーションとのシームレスな統合を実現します。
概要
Supabase MCP サーバーは、MCP クライアントと Supabase の一連のサービス間のブリッジとして機能し、次の機能を提供します。
- 豊富なクエリ機能を備えたデータベース操作
- ファイルと資産のストレージ管理
- エッジ関数の呼び出し
- プロジェクトと組織管理
- ユーザー認証と管理
- ロールベースのアクセス制御
建築
サーバーは TypeScript を使用して構築され、モジュール アーキテクチャに従います。
supabase-server/
├── src/
│ ├── index.ts # Main server implementation
│ └── types/
│ └── supabase.d.ts # Type definitions
├── package.json
├── tsconfig.json
├── config.json.example # Example configuration file
└── .env.example # Environment variables template
主要コンポーネント
- サーバークラス: MCPサーバーインターフェースを実装し、すべてのクライアント要求を処理します。
- 型定義: すべての操作に対する包括的なTypeScript定義
- 環境設定: 環境変数による安全な設定管理
- エラー処理: 詳細なエラーメッセージによる堅牢なエラー処理
前提条件
- Node.js 16.x 以上
- Supabase プロジェクト:
- プロジェクトURL
- サービスロールキー(管理者操作用)
- アクセストークン(管理操作用)
- MCP互換クライアント
インストール
Smithery経由でインストール
Smithery経由で Claude Desktop 用の Supabase Server を自動的にインストールするには:
npx -y @smithery/cli install supabase-server --client claude
- リポジトリをクローンします。
git clone https://github.com/DynamicEndpoints/supabase-mcp.git
cd supabase-mcp
- 依存関係をインストールします:
- 環境構成を作成します。
- 環境変数を設定します。
SUPABASE_URL=your_project_url_here
SUPABASE_KEY=your_service_role_key_here
SUPABASE_ACCESS_TOKEN=your_access_token_here # Required for management operations
- サーバー構成を作成します。
cp config.json.example config.json
- サーバーを構築します。
構成
サーバーは、環境変数とconfig.jsonファイルの両方を通じて、広範な設定をサポートしています。設定オプションの詳細な内訳は次のとおりです。
サーバー構成
{
"server": {
"name": "supabase-server", // Server name
"version": "0.1.0", // Server version
"port": 3000, // Port number (if running standalone)
"host": "localhost" // Host address (if running standalone)
}
}
Supabase 構成
{
"supabase": {
"project": {
"url": "your_project_url",
"key": "your_service_role_key",
"accessToken": "your_access_token"
},
"storage": {
"defaultBucket": "public", // Default storage bucket
"maxFileSize": 52428800, // Max file size in bytes (50MB)
"allowedMimeTypes": [ // Allowed file types
"image/*",
"application/pdf",
"text/*"
]
},
"database": {
"maxConnections": 10, // Max DB connections
"timeout": 30000, // Query timeout in ms
"ssl": true // SSL connection
},
"auth": {
"autoConfirmUsers": false, // Auto-confirm new users
"disableSignup": false, // Disable public signups
"jwt": {
"expiresIn": "1h", // Token expiration
"algorithm": "HS256" // JWT algorithm
}
}
}
}
ログ構成
{
"logging": {
"level": "info", // Log level
"format": "json", // Log format
"outputs": ["console", "file"], // Output destinations
"file": {
"path": "logs/server.log", // Log file path
"maxSize": "10m", // Max file size
"maxFiles": 5 // Max number of files
}
}
}
セキュリティ構成
{
"security": {
"cors": {
"enabled": true,
"origins": ["*"],
"methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
"allowedHeaders": ["Content-Type", "Authorization"]
},
"rateLimit": {
"enabled": true,
"windowMs": 900000, // 15 minutes
"max": 100 // Max requests per window
}
}
}
監視構成
{
"monitoring": {
"enabled": true,
"metrics": {
"collect": true,
"interval": 60000 // Collection interval in ms
},
"health": {
"enabled": true,
"path": "/health" // Health check endpoint
}
}
}
完全なサンプル構成ファイルについては、 config.json.example
参照してください。
MCP統合
サーバーを MCP 設定 (cline_mcp_settings.json) に追加します。
{
"mcpServers": {
"supabase": {
"command": "node",
"args": ["path/to/supabase-server/build/index.js"],
"env": {
"SUPABASE_URL": "your_project_url",
"SUPABASE_KEY": "your_service_role_key",
"SUPABASE_ACCESS_TOKEN": "your_access_token"
},
"config": "path/to/config.json" // Optional: path to configuration file
}
}
}
利用可能なツール
データベース操作
レコード作成
特定のフィールドを返す機能をサポートするテーブルに新しいレコードを作成します。
{
table: string;
data: Record<string, any>;
returning?: string[];
}
例:
{
table: "users",
data: {
name: "John Doe",
email: "john@example.com"
},
returning: ["id", "created_at"]
}
レコード読み取り
高度なフィルタリング、結合、フィールド選択を使用してレコードを読み取ります。
{
table: string;
select?: string[];
filter?: Record<string, any>;
joins?: Array<{
type?: 'inner' | 'left' | 'right' | 'full';
table: string;
on: string;
}>;
}
例:
{
table: "posts",
select: ["id", "title", "user.name"],
filter: { published: true },
joins: [{
type: "left",
table: "users",
on: "posts.user_id=users.id"
}]
}
更新レコード
フィルタリング機能と戻り機能を使用してレコードを更新します。
{
table: string;
data: Record<string, any>;
filter?: Record<string, any>;
returning?: string[];
}
例:
{
table: "users",
data: { status: "active" },
filter: { email: "john@example.com" },
returning: ["id", "status", "updated_at"]
}
レコードの削除
フィルタリング機能と戻り機能を使用してレコードを削除します。
{
table: string;
filter?: Record<string, any>;
returning?: string[];
}
例:
{
table: "posts",
filter: { status: "draft" },
returning: ["id", "title"]
}
ストレージ操作
アップロードファイル
設定可能なオプションを使用して、Supabase ストレージにファイルをアップロードします。
{
bucket: string;
path: string;
file: File | Blob;
options?: {
cacheControl?: string;
contentType?: string;
upsert?: boolean;
};
}
例:
{
bucket: "avatars",
path: "users/123/profile.jpg",
file: imageBlob,
options: {
contentType: "image/jpeg",
upsert: true
}
}
ダウンロードファイル
Supabase Storage からファイルをダウンロードします。
{
bucket: string;
path: string;
}
例:
{
bucket: "documents",
path: "reports/annual-2023.pdf"
}
エッジ関数
呼び出し関数
パラメーターとカスタム オプションを使用して Supabase Edge Functions を呼び出します。
{
function: string;
params?: Record<string, any>;
options?: {
headers?: Record<string, string>;
responseType?: 'json' | 'text' | 'arraybuffer';
};
}
例:
{
function: "process-image",
params: {
url: "https://example.com/image.jpg",
width: 800
},
options: {
responseType: "json"
}
}
ユーザー管理
リストユーザー
ページ区切りをサポートするユーザーを一覧表示します。
{
page?: number;
per_page?: number;
}
ユーザー作成
メタデータを使用して新しいユーザーを作成します。
{
email: string;
password: string;
data?: Record<string, any>;
}
更新ユーザー
ユーザーの詳細を更新します。
{
user_id: string;
email?: string;
password?: string;
data?: Record<string, any>;
}
ユーザー削除
ユーザーを削除します。
ユーザーロールの割り当て
ユーザーにロールを割り当てます。
{
user_id: string;
role: string;
}
ユーザーロールの削除
ユーザーからロールを削除します。
{
user_id: string;
role: string;
}
エラー処理
サーバーは、一般的なシナリオに対して詳細なエラー メッセージを提供します。
- 無効なパラメータ
- 認証失敗
- 権限の問題
- レート制限
- ネットワークエラー
- データベースの制約
エラーは標準化された形式で返されます。
{
code: ErrorCode;
message: string;
details?: any;
}
発達
テストの実行
建物
リンティング
貢献
- リポジトリをフォークする
- 機能ブランチを作成する
- 変更をコミットする
- ブランチにプッシュする
- プルリクエストを作成する
ライセンス
MITライセンス - 詳細はライセンスを参照
サポート
サポートについては、以下をご覧ください。
- 既存の問題/解決策を確認する
- 詳細な再現手順を記載した新しい問題を作成する
- 関連するエラーメッセージと環境の詳細を含める