supabase-mcp

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Acts as a bridge between MCP clients and Supabase services, providing database operations, storage management, edge function invocation, project/organization management, and user authentication/management

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
  1. リポジトリをクローンします。
git clone https://github.com/DynamicEndpoints/supabase-mcp.git cd supabase-mcp
  1. 依存関係をインストールします:
npm install
  1. 環境構成を作成します。
cp .env.example .env
  1. 環境変数を設定します。
SUPABASE_URL=your_project_url_here SUPABASE_KEY=your_service_role_key_here SUPABASE_ACCESS_TOKEN=your_access_token_here # Required for management operations
  1. サーバー構成を作成します。
cp config.json.example config.json
  1. サーバーを構築します。
npm run build

構成

サーバーは、環境変数と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; }

ユーザーロールの割り当て

ユーザーにロールを割り当てます。

{ user_id: string; role: string; }

ユーザーロールの削除

ユーザーからロールを削除します。

{ user_id: string; role: string; }

エラー処理

サーバーは、一般的なシナリオに対して詳細なエラー メッセージを提供します。

  • 無効なパラメータ
  • 認証失敗
  • 権限の問題
  • レート制限
  • ネットワークエラー
  • データベースの制約

エラーは標準化された形式で返されます。

{ code: ErrorCode; message: string; details?: any; }

発達

テストの実行

npm test

建物

npm run build

リンティング

npm run lint

貢献

  1. リポジトリをフォークする
  2. 機能ブランチを作成する
  3. 変更をコミットする
  4. ブランチにプッシュする
  5. プルリクエストを作成する

ライセンス

MITライセンス - 詳細はライセンスを参照

サポート

サポートについては、以下をご覧ください。

  1. 既存の問題/解決を確認する
  2. 詳細な再現手順を記載した新しい問題を作成する
  3. 関連するエラーメッセージと環境の詳細を含める
ID: vwi6nt8i80