ScopeGate について
ScopeGateは、AIエージェントのサービスアクセスを制御するセルフホスト可能なゲートウェイです。操作単位で制限したMCPエンドポイントを発行し、リクエストを記録して確認や失効に利用できます。
主な機能
- 01操作単位のサービス権限設定
- 02プロジェクト別のエンドポイント管理
- 03リクエスト監査ログの記録と出力
- 04エンドポイントキーの個別失効
- 05トークンの暗号化と自動更新
活用シーン
- 01メールの閲覧を許可し送信を禁止
- 02エージェントのサービス操作を制限
- 03ツールと結果ごとに呼び出しを確認
MCP 対応
ScopeGateはStreamable HTTPで権限を限定したMCPエンドポイントを公開します。MCPクライアントには、各エンドポイントで許可された操作に対応するツールだけが提供されます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://scopegate.dev/api/mcp/{api_key}claude mcp add --transport http alifanov-scopegate https://scopegate.dev/api/mcp/{api_key}{"mcpServers":{"alifanov-scopegate":{"type":"http","url":"https://scopegate.dev/api/mcp/{api_key}"}}}Cursor で開く{"servers":{"alifanov-scopegate":{"type":"http","url":"https://scopegate.dev/api/mcp/{api_key}"}}}VS Code で開く{"mcpServers":{"alifanov-scopegate":{"type":"http","url":"https://scopegate.dev/api/mcp/{api_key}"}}}{"mcpServers":{"alifanov-scopegate":{"serverUrl":"https://scopegate.dev/api/mcp/{api_key}"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
ScopeGate
AI エージェントに、OAuth スコープを丸ごと渡すのはもうやめましょう。
ScopeGate は、エージェントと、エージェントがアクセスするアカウント(自分のアカウントでも、クライアントのアカウントでも)の間に位置します。サービスを一度接続し、エージェントが呼び出せる操作を正確に選択して、それ以外の操作ができない MCP エンドポイントを渡します。すべての呼び出しが記録され、接続に影響を与えることなく、ワンクリックでキーを無効化できます。
- 操作ごとの権限設定 —
gmail:read_emailsは許可、gmail:send_emailは不許可。プロバイダーのどの OAuth スコープよりも細かく設定できます。 - 監査ログ — 誰が、どのツールを使い、どのような結果になったか、所要時間はいくらか。プロジェクトごとに確認でき、エクスポートも可能です。
- ワンクリックでの失効 — エンドポイントキーを再生成します。サービス接続はそのまま維持されます。
- トークンは外部に出ません — 保存時は AES-256-GCM で暗号化され、自動的に更新されます。エージェントに表示されるのは常に
sg_…のみです。
次の 1 つのコマンドで、自分で実行できます。
docker compose --profile local up
http://localhost:3000 を開きます — 初回起動時に、コンテナログに管理者ログイン情報が出力されます。詳しくはクイックスタート(セルフホスト)をご覧ください。
技術スタック
- フレームワーク: Next.js 16(App Router)
- 言語: TypeScript
- データベース: PostgreSQL + Prisma 7
- UI: Tailwind CSS v4、shadcn/ui
- 認証: Better Auth(データベース管理セッション、Prisma アダプター)
- MCP:
@modelcontextprotocol/sdk(Streamable HTTP) - パッケージマネージャー: pnpm
クイックスタート(セルフホスト)
ホステッドクラウド版と機能に違いはありません。セルフホスト版で省略される機能はありません。
git clone https://github.com/alifanov/scopegate.git
cd scopegate
docker compose --profile local up
http://localhost:3000 を開きます。.env ファイルは不要です。ローカルの Postgres と、新しい BETTER_AUTH_SECRET が自動的に用意されます。また、生成された管理者ログイン情報は、初回起動時に app コンテナのログに一度だけ出力されます(Generated admin login を探してください)。docker compose logs app | grep -A4 "First run" で検索できます。パスワードは app_data ボリュームにも保存されるため、再起動後も維持されます。
実際のサービス(Gmail、LinkedIn、GitHub など)に接続するには、.env.example を .env にコピーし、利用するプロバイダーの OAuth クライアント ID/シークレットを入力します。各ブロックは独立しており、任意です。認証情報が設定されていないプロバイダーは表示されません。
開発環境のセットアップ
前提条件
- Node.js 20.19 以降、22.12 以降、または 24 以降(Prisma 7 で必要)
- pnpm
- PostgreSQL
セットアップ
- リポジトリをクローンし、依存関係をインストールします。
pnpm install
- 環境設定ファイルをコピーし、値を入力します。
cp .env.example .env
| 変数 | 説明 |
|---|---|
DATABASE_URL | PostgreSQL 接続文字列 |
BETTER_AUTH_SECRET | セッション署名用のシークレットキー |
BETTER_AUTH_URL | アプリのベース URL(例:http://localhost:3000) |
ADMIN_EMAIL | 初期管理者のメールアドレス |
ADMIN_PASSWORD | 初期管理者のパスワード |
- データベースのマイグレーションを実行します。
pnpm prisma migrate dev
- 開発サーバーを起動します。
pnpm dev
http://localhost:3000 を開きます。
プロジェクト構成
src/
├── app/
│ ├── (auth)/ # Login & register pages
│ ├── (dashboard)/ # Protected dashboard pages
│ │ └── projects/ # Project management, endpoints, audit, settings
│ ├── api/
│ │ ├── auth/[...all]/ # Better Auth catch-all handler
│ │ ├── projects/ # Projects CRUD, endpoints, services, audit
│ │ └── mcp/[apiKey]/ # MCP Streamable HTTP handler
│ ├── layout.tsx
│ └── page.tsx # Landing page
├── components/
│ ├── ui/ # shadcn/ui components
│ ├── layout/ # Sidebar, header
│ └── shared/ # Reusable app components
├── lib/
│ ├── db.ts # Prisma client singleton
│ ├── auth.ts # Better Auth server instance
│ ├── auth-client.ts # Better Auth client SDK
│ ├── auth-middleware.ts # getCurrentUser() helper
│ ├── bootstrap.ts # Admin user bootstrap on empty DB
│ ├── provider-registry.ts # Every supported provider — the one file to edit
│ └── mcp/
│ ├── permissions.ts # Permission groups (derived from the registry)
│ ├── tools/ # One file per service, aggregated in index.ts
│ ├── service-fetch.ts # Unified, SSRF-safe transport for all providers
│ └── handler.ts # MCP server factory + audit logging
├── generated/prisma/ # Generated Prisma client
└── middleware.ts # Route protection
利用可能なスクリプト
pnpm dev # Start development server
pnpm build # Production build
pnpm start # Start production server
pnpm lint # Run ESLint
pnpm prisma generate # Regenerate Prisma client
pnpm prisma migrate dev # Create and apply migrations
pnpm prisma studio # Open Prisma Studio (DB browser)
仕組み
- ログイン — 管理者の認証情報でサインインします(初回起動時に環境変数から初期設定されます)
- プロジェクトの作成 — プロジェクトごとにエンドポイントとサービスを整理します
- サービスの接続 — プロジェクトにサービス接続を追加します
- MCP エンドポイントの作成 — サービス接続を選択し、特定の権限(例:
gmail:read_emails、calendar:create_event)を指定します - MCP URL の使用 — エンドポイント URL を MCP 対応の任意の AI エージェントに設定します。許可された操作のみが公開されます
- 監視 — 監査ログですべてのリクエストを追跡します
権限
権限はサービスではなく、単一のアクションです。たとえば、gmail:send_email を付与せずに gmail:read_emails を付与できます。グループは src/lib/provider-registry.ts(27 のプロバイダー:Google Workspace、Google Ads & Search Console、Meta、LinkedIn、Twitter、Slack、Notion、Jira、HubSpot、Salesforce、Stripe、Airtable、…)をもとに導出され、src/lib/mcp/permissions.ts に記載されています。プロバイダーを追加するにはレジストリを編集します。トランスポート、トークン戦略、権限グループはすべてレジストリから導出されます。
Google の例をいくつか紹介します。
| グループ | アクション |
|---|---|
| Gmail | gmail:read_emails、gmail:send_email、gmail:list_labels、gmail:search_emails |
| Google Calendar | calendar:list_events、calendar:create_event、calendar:update_event、calendar:delete_event |
| Google Drive | drive:list_files、drive:read_file、drive:create_file、drive:delete_file |
データベーススキーマ
- User — 認証、チームメンバーシップ
- Session — データベースに保存される認証セッション
- Account — 認証プロバイダーの認証情報(メールアドレス/パスワード)
- Project — サービスとエンドポイントの論理的なグループ化
- TeamMember — ロール(オーナー/メンバー)を持つユーザーとプロジェクトの関係
- ServiceConnection — 接続済みサービスの OAuth トークン
- McpEndpoint — API キー、レート制限、有効状態を持つ MCP エンドポイント
- EndpointPermission — エンドポイントごとに許可されたアクション
- AuditLog — アクション、ステータス、所要時間、エラーを記録するリクエストログ
ライセンス
LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。