Model Context Protocol (MCP) サーバー ↗ は、Cloudflare Access で保護できます。MCP サーバーのコードとホスト名を誰が管理するかによって、次の方法から選びます。
| 方法 | 向いているケース | 認証の担当 |
|---|---|---|
| 顧客管理のサードパーティ MCP サーバー | Cloudflare 上で自分で管理するホスト名で、サードパーティ製の MCP サーバーコードを動かす場合 | サードパーティ MCP サーバー |
| SaaS 管理のサードパーティ MCP サーバー | プロバイダーがホストし、顧客指定の OAuth または OIDC 設定に対応するサードパーティ MCP サーバー | サードパーティ MCP サーバー(Access を OIDC プロバイダーとして使用) |
MCP サーバーが Cloudflare 上で自分で管理するホスト名で動き、サーバーコードはサードパーティが管理し、すでに独自の OAuth フローを持っている場合に使います。この構成では Access Managed OAuth は有効にしないでください。生成された Access アプリケーションに、MCP サーバーのホスト名を public hostname として追加する必要もありません。
- MCP サーバーのホスト名で、Cloudflare DNS の Proxy status がオンになっていることを確認します。
- Cloudflare ダッシュボード ↗ で、Zero Trust > Access controls > AI controls を開きます。
- MCP servers タブを開きます。
- Add an MCP server を選びます。
- サーバー名を入力します。
- HTTP URL に、MCP パスを含む MCP サーバーの URL を入力します。例:
https://mcp.example.com/mcp - Access ポリシー を設定し、MCP サーバーを使えるユーザーを決めます。
-
ユーザーの認証方法を設定します。
アプリケーションで有効にする アイデンティティプロバイダー を選択します。
(推奨)単一の IdP だけでアクセスを許可する場合は、Apply instant authentication をオンにします。エンドユーザーには Cloudflare Access のログインページ は表示されません。代わりに、Cloudflare はユーザーを SSO ログインへ直接リダイレクトします。
- (任意) Authenticate with Cloudflare One Client をオンにすると、ユーザーは Cloudflare One Client のセッションアイデンティティ でアプリケーションに認証できます。
- Save and connect server を選びます。
- MCP サーバーが認証を求めた場合は、サードパーティの OAuth フローを完了します。
サードパーティプロバイダーが MCP サーバーをホストし、カスタムの OAuth または OIDC アイデンティティプロバイダーを設定できる場合に使います。この構成では、MCP サーバーが Cloudflare Access に対して OAuth 認可コードフローを実装し、ダウンストリームサービス呼び出しに使える access_token を受け取ります。
次の手順では、Cloudflare Workers 上のリモート MCP サーバー を使って、Access for SaaS の設定を示します。SaaS 管理のサーバーでは、プロバイダーの設定手順に従い、手順 2 で作成した Access for SaaS の値を使います。ユーザーが MCP クライアント から MCP サーバーに接続すると、アイデンティティプロバイダー へのログインを求められ、Access ポリシー を満たした場合にだけアクセスできます。
- Zero Trust 組織 を作成します。
- One-time PIN を設定するか、サードパーティの アイデンティティプロバイダー を接続します。
サンプル MCP サーバー ↗ を Cloudflare アカウントへデプロイします。
-
次のボタンを選び、クイックスタートを開始します。
-
Zero Trust 組織があるアカウントを選びます。
-
Create an application ページで、次の項目を設定します。
- Git account: 既存のアカウントを選ぶか、新しい GitHub または GitLab アカウントを接続します。
- Create private Git repository: プロジェクトリポジトリを公開にするか非公開にするかを選びます。
- Project name:
mcp-server-cf-access - Select KV namespace: Create new
- Name your KV namespace:
OAUTH_KV
ACCESS_CLIENT_IDとその他のシークレット値は、後の手順で設定します。 -
Create and deploy を選びます。
MCP サーバーは、*.workers.dev サブドメイン上の mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev にデプロイされます。GitHub または GitLab アカウントに MCP サーバー用の新しい git リポジトリが作成され、メインブランチへの push またはプルリクエストのマージのたびに、自動で Cloudflare へデプロイされます。
Wrangler CLI を使い、ローカルで MCP サーバーを作成して Cloudflare へデプロイできます。
-
ターミナルを開き、サンプルプロジェクトをクローンします。
npm create cloudflare@latest -- mcp-server-cf-access --template=cloudflare/ai/demos/remote-mcp-cf-accessセットアップ中は、次の選択肢を選びます。
- Do you want to add an AGENTS.md file to help AI coding tools understand Cloudflare APIs? には
Noを選びます。 - Do you want to use git for version control? には
Noを選びます。 - Do you want to deploy your application? には
Noを選びます(デプロイ前に変更を加えます)。
- Do you want to add an AGENTS.md file to help AI coding tools understand Cloudflare APIs? には
-
プロジェクトディレクトリへ移動します。
cd mcp-server-cf-access -
キーを保存する Workers KV namespace を作成します。サンプルをそのまま動かす場合、バインディング名は
OAUTH_KVにしてください。npx wrangler kv namespace create "OAUTH_KV"コマンドは、バインディング名と KV namespace ID を出力します。
{ "kv_namespaces": [ { "binding": "OAUTH_KV", "id": "<YOUR_KV_NAMESPACE_ID>" } ] } -
エディターで
wrangler.jsoncを開き、OAUTH_KVnamespace ID を入れます。"kv_namespaces": [ { "binding": "OAUTH_KV", "id": "<YOUR_KV_NAMESPACE_ID>" } ], -
Worker を Cloudflare のグローバルネットワークへデプロイできます。
npx wrangler deploy
Worker は、*.workers.dev サブドメイン上の mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev にデプロイされます。
-
Cloudflare ダッシュボード ↗ で、Zero Trust > Access controls > Applications を開きます。
-
Create new application を選びます。
-
SaaS application を選びます。
-
Application にカスタム名(例:
MCP server)を入力し、下に表示されるテキストボックスを選びます。 -
認証プロトコルとして OIDC を選びます。
-
Add application を選びます。
-
Redirect URLs に、MCP サーバーの認可コールバック URL を入力します。サンプル MCP サーバー のコールバック URL は
https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/callbackです。 -
次の値をコピーし、サンプル MCP サーバーへ入力します。ほかの MCP サーバーでは、必要な値の組み合わせが異なる場合があります。
- Client secret
- Client ID
- Token endpoint
- Authorization endpoint
- Key endpoint
-
(任意)Advanced settings で Refresh tokens をオンにすると、アイデンティティプロバイダーへのログイン回数を減らせます。
-
Access ポリシー を設定し、MCP サーバーへアクセスできるユーザーを決めます。
-
ユーザーの認証方法を設定します。
アプリケーションで有効にする アイデンティティプロバイダー を選択します。
(推奨)単一の IdP だけでアクセスを許可する場合は、Apply instant authentication をオンにします。エンドユーザーには Cloudflare Access のログインページ は表示されません。代わりに、Cloudflare はユーザーを SSO ログインへ直接リダイレクトします。
- (任意) Authenticate with Cloudflare One Client をオンにすると、ユーザーは Cloudflare One Client のセッションアイデンティティ でアプリケーションに認証できます。
-
Create を選びます。
-
Access applications エンドポイントへ
POSTリクエストを送ります。
At least one of the following token permissions is required:Required API token permissions
Access: Apps and Policies Write
Add an Access applicationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \ --request POST \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "name": "MCP server", "type": "saas", "saas_app": { "auth_type": "oidc", "redirect_uris": [ "https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/callback" ], "grant_type": [ "authorization_code", "refresh_tokens" ], "refresh_token_options": { "lifetime": "90d" } }, "policies": [ "f174e90a-fafe-4643-bbbc-4a0ed4fc8415" ], "allowed_idps": [] }' -
レスポンスの
client_idとclient_secretをコピーします。 -
チーム名 とレスポンスの
client_idを使い、OAuth エンドポイント URL を組み立てます。エンドポイント URL Token endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/tokenAuthorization endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/authorizationKey endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/jwks
MCP サーバーは、手順 2 で作成した SaaS アプリから access_token を取得するため、OAuth 2.0 認可フローを実行する必要があります。MCP サーバー上で OAuth クライアントを設定するときは、Access for SaaS アプリの OAuth エンドポイントと資格情報を貼り付けます。
サンプル MCP サーバー に OAuth エンドポイントと資格情報を追加します。
-
Cloudflare ダッシュボード ↗ で、Workers & Pages ページを開きます。
Workers & Pages を開く ↗ -
mcp-server-cf-accessWorker を選びます。 -
Settings を開きます。
-
Variables and Secrets で、各シークレットを Access for SaaS アプリ から取得した対応する値に更新します。
Workers シークレット SaaS アプリの項目 ACCESS_CLIENT_IDClient ID ACCESS_CLIENT_SECRETClient secret ACCESS_TOKEN_URLToken endpoint ACCESS_AUTHORIZATION_URLAuthorization endpoint ACCESS_JWKS_URLKey endpoint -
COOKIE_ENCRYPTION_KEYには、次のコマンドでランダムな文字列を生成できます。openssl rand -hex 32このコマンドの出力を
COOKIE_ENCRYPTION_KEYに入力します。
-
次の Workers secrets を作成します。
npx wrangler secret put ACCESS_CLIENT_ID npx wrangler secret put ACCESS_CLIENT_SECRET npx wrangler secret put ACCESS_TOKEN_URL npx wrangler secret put ACCESS_AUTHORIZATION_URL npx wrangler secret put ACCESS_JWKS_URL -
シークレット値の入力を求められたら、Access for SaaS アプリ から取得した対応する値を貼り付けます。
Workers シークレット SaaS アプリの項目 ACCESS_CLIENT_IDClient ID ACCESS_CLIENT_SECRETClient secret ACCESS_TOKEN_URLToken endpoint ACCESS_AUTHORIZATION_URLAuthorization endpoint ACCESS_JWKS_URLKey endpoint -
Cookie 暗号化キー用のランダムな文字列を生成します。
openssl rand -hex 32このコマンドの出力を Workers secret に保存します。
npx wrangler secret put COOKIE_ENCRYPTION_KEY
https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcp の MCP サーバーへ、Workers AI Playground ↗、MCP inspector ↗、またはリモート MCP サーバーに対応する その他の MCP クライアント から接続できます。
Workers AI Playground でテストする手順は次のとおりです。
-
Workers AI Playground ↗ を開きます。
-
MCP Servers で、MCP サーバー URL に
https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcpを入力します。 -
Connect を選びます。
-
MCP サーバーへのアクセスを求めるポップアップが表示されます。Approve を選びます。
-
表示に従い、アイデンティティプロバイダーへログインします。
Workers AI Playground に Connected と表示されます。MCP サーバーは Cloudflare Access から access_token を取得できるはずです。
MCP サーバーがユーザーに代わって、ほかのセルフホストアプリケーションへ認証済みリクエストを送れるようにするには、ダウンストリームアプリケーションに Linked App Token ポリシーを作成します。MCP サーバーは、Access から受け取った Cf-Access-Jwt-Assertion ヘッダーを、Cf-Access-Token ヘッダーとしてダウンストリームアプリケーションへ転送します。