mcpField
S
ScopeGate

ScopeGate

リモート
scopegate.devセキュリティ182 日前に更新
リポジトリ公式サイト

ScopeGate について

ScopeGateは、AIエージェントのサービスアクセスを制御するセルフホスト可能なゲートウェイです。操作単位で制限したMCPエンドポイントを発行し、リクエストを記録して確認や失効に利用できます。

主な機能

  1. 01操作単位のサービス権限設定
  2. 02プロジェクト別のエンドポイント管理
  3. 03リクエスト監査ログの記録と出力
  4. 04エンドポイントキーの個別失効
  5. 05トークンの暗号化と自動更新

活用シーン

  1. 01メールの閲覧を許可し送信を禁止
  2. 02エージェントのサービス操作を制限
  3. 03ツールと結果ごとに呼び出しを確認

MCP 対応

ScopeGateはStreamable HTTPで権限を限定したMCPエンドポイントを公開します。MCPクライアントには、各エンドポイントで許可された操作に対応するツールだけが提供されます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://scopegate.dev/api/mcp/{api_key}
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、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
セットアップ
  1. リポジトリをクローンし、依存関係をインストールします。
pnpm install
  1. 環境設定ファイルをコピーし、値を入力します。
cp .env.example .env
変数説明
DATABASE_URLPostgreSQL 接続文字列
BETTER_AUTH_SECRETセッション署名用のシークレットキー
BETTER_AUTH_URLアプリのベース URL(例:http://localhost:3000)
ADMIN_EMAIL初期管理者のメールアドレス
ADMIN_PASSWORD初期管理者のパスワード
  1. データベースのマイグレーションを実行します。
pnpm prisma migrate dev
  1. 開発サーバーを起動します。
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)

仕組み

  1. ログイン — 管理者の認証情報でサインインします(初回起動時に環境変数から初期設定されます)
  2. プロジェクトの作成 — プロジェクトごとにエンドポイントとサービスを整理します
  3. サービスの接続 — プロジェクトにサービス接続を追加します
  4. MCP エンドポイントの作成 — サービス接続を選択し、特定の権限(例:gmail:read_emails、calendar:create_event)を指定します
  5. MCP URL の使用 — エンドポイント URL を MCP 対応の任意の AI エージェントに設定します。許可された操作のみが公開されます
  6. 監視 — 監査ログですべてのリクエストを追跡します

権限

権限はサービスではなく、単一のアクションです。たとえば、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 の例をいくつか紹介します。

グループアクション
Gmailgmail:read_emails、gmail:send_email、gmail:list_labels、gmail:search_emails
Google Calendarcalendar:list_events、calendar:create_event、calendar:update_event、calendar:delete_event
Google Drivedrive:list_files、drive:read_file、drive:create_file、drive:delete_file

データベーススキーマ

  • User — 認証、チームメンバーシップ
  • Session — データベースに保存される認証セッション
  • Account — 認証プロバイダーの認証情報(メールアドレス/パスワード)
  • Project — サービスとエンドポイントの論理的なグループ化
  • TeamMember — ロール(オーナー/メンバー)を持つユーザーとプロジェクトの関係
  • ServiceConnection — 接続済みサービスの OAuth トークン
  • McpEndpoint — API キー、レート制限、有効状態を持つ MCP エンドポイント
  • EndpointPermission — エンドポイントごとに許可されたアクション
  • AuditLog — アクション、ステータス、所要時間、エラーを記録するリクエストログ

ライセンス

LICENSE をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。