Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

MCP サーバーを保護する

最終更新 Markdown で表示Agent セットアップ

Model Context Protocol (MCP) サーバー は、Cloudflare Access で保護できます。MCP サーバーのコードとホスト名を誰が管理するかによって、次の方法から選びます。

方法 向いているケース 認証の担当
顧客管理のサードパーティ MCP サーバー Cloudflare 上で自分で管理するホスト名で、サードパーティ製の MCP サーバーコードを動かす場合 サードパーティ MCP サーバー
SaaS 管理のサードパーティ MCP サーバー プロバイダーがホストし、顧客指定の OAuth または OIDC 設定に対応するサードパーティ MCP サーバー サードパーティ MCP サーバー(Access を OIDC プロバイダーとして使用)

顧客管理のサードパーティ MCP サーバー

MCP サーバーが Cloudflare 上で自分で管理するホスト名で動き、サーバーコードはサードパーティが管理し、すでに独自の OAuth フローを持っている場合に使います。この構成では Access Managed OAuth は有効にしないでください。生成された Access アプリケーションに、MCP サーバーのホスト名を public hostname として追加する必要もありません。

  1. MCP サーバーのホスト名で、Cloudflare DNS の Proxy status がオンになっていることを確認します。
  2. Cloudflare ダッシュボード で、Zero Trust > Access controls > AI controls を開きます。
  3. MCP servers タブを開きます。
  4. Add an MCP server を選びます。
  5. サーバー名を入力します。
  6. HTTP URL に、MCP パスを含む MCP サーバーの URL を入力します。例: https://mcp.example.com/mcp
  7. Access ポリシー を設定し、MCP サーバーを使えるユーザーを決めます。
  8. ユーザーの認証方法を設定します。

    1. アプリケーションで有効にする アイデンティティプロバイダー を選択します。

    2. (推奨)単一の IdP だけでアクセスを許可する場合は、Apply instant authentication をオンにします。エンドユーザーには Cloudflare Access のログインページ は表示されません。代わりに、Cloudflare はユーザーを SSO ログインへ直接リダイレクトします。

    3. (任意) Authenticate with Cloudflare One Client をオンにすると、ユーザーは Cloudflare One Client のセッションアイデンティティ でアプリケーションに認証できます。
  9. Save and connect server を選びます。
  10. MCP サーバーが認証を求めた場合は、サードパーティの OAuth フローを完了します。

SaaS 管理のサードパーティ MCP サーバー

サードパーティプロバイダーが MCP サーバーをホストし、カスタムの OAuth または OIDC アイデンティティプロバイダーを設定できる場合に使います。この構成では、MCP サーバーが Cloudflare Access に対して OAuth 認可コードフローを実装し、ダウンストリームサービス呼び出しに使える access_token を受け取ります。

次の手順では、Cloudflare Workers 上のリモート MCP サーバー を使って、Access for SaaS の設定を示します。SaaS 管理のサーバーでは、プロバイダーの設定手順に従い、手順 2 で作成した Access for SaaS の値を使います。ユーザーが MCP クライアント から MCP サーバーに接続すると、アイデンティティプロバイダー へのログインを求められ、Access ポリシー を満たした場合にだけアクセスできます。

前提条件

1. サンプル MCP サーバーをデプロイする

サンプル MCP サーバー を Cloudflare アカウントへデプロイします。

  1. 次のボタンを選び、クイックスタートを開始します。

    Deploy to Workers

  2. Zero Trust 組織があるアカウントを選びます。

  3. 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 とその他のシークレット値は、後の手順で設定します。

  4. Create and deploy を選びます。

MCP サーバーは、*.workers.dev サブドメイン上の mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev にデプロイされます。GitHub または GitLab アカウントに MCP サーバー用の新しい git リポジトリが作成され、メインブランチへの push またはプルリクエストのマージのたびに、自動で Cloudflare へデプロイされます。

Wrangler CLI を使い、ローカルで MCP サーバーを作成して Cloudflare へデプロイできます。

  1. ターミナルを開き、サンプルプロジェクトをクローンします。

    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 を選びます(デプロイ前に変更を加えます)。
  2. プロジェクトディレクトリへ移動します。

    cd mcp-server-cf-access
  3. キーを保存する 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>"
    		}
    	]
    }
  4. エディターで wrangler.jsonc を開き、OAUTH_KV namespace ID を入れます。

    "kv_namespaces": [
    	{
    		"binding": "OAUTH_KV",
    		"id": "<YOUR_KV_NAMESPACE_ID>"
    	}
    ],
  5. Worker を Cloudflare のグローバルネットワークへデプロイできます。

    npx wrangler deploy

Worker は、*.workers.dev サブドメイン上の mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev にデプロイされます。

2. Access for SaaS アプリを作成する

  1. Cloudflare ダッシュボード で、Zero Trust > Access controls > Applications を開きます。

  2. Create new application を選びます。

  3. SaaS application を選びます。

  4. Application にカスタム名(例: MCP server)を入力し、下に表示されるテキストボックスを選びます。

  5. 認証プロトコルとして OIDC を選びます。

  6. Add application を選びます。

  7. Redirect URLs に、MCP サーバーの認可コールバック URL を入力します。サンプル MCP サーバー のコールバック URL は https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/callback です。

  8. 次の値をコピーし、サンプル MCP サーバーへ入力します。ほかの MCP サーバーでは、必要な値の組み合わせが異なる場合があります。

    • Client secret
    • Client ID
    • Token endpoint
    • Authorization endpoint
    • Key endpoint
  9. (任意)Advanced settingsRefresh tokens をオンにすると、アイデンティティプロバイダーへのログイン回数を減らせます。

  10. Access ポリシー を設定し、MCP サーバーへアクセスできるユーザーを決めます。

  11. ユーザーの認証方法を設定します。

    1. アプリケーションで有効にする アイデンティティプロバイダー を選択します。

    2. (推奨)単一の IdP だけでアクセスを許可する場合は、Apply instant authentication をオンにします。エンドユーザーには Cloudflare Access のログインページ は表示されません。代わりに、Cloudflare はユーザーを SSO ログインへ直接リダイレクトします。

    3. (任意) Authenticate with Cloudflare One Client をオンにすると、ユーザーは Cloudflare One Client のセッションアイデンティティ でアプリケーションに認証できます。
  12. Create を選びます。

  1. Access applications エンドポイントへ POST リクエストを送ります。

    Required API token permissions

    At least one of the following token permissions is required:
    • 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": []
    	}'
  2. レスポンスの client_idclient_secret をコピーします。

  3. チーム名 とレスポンスの client_id を使い、OAuth エンドポイント URL を組み立てます。

    エンドポイント URL
    Token endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/token
    Authorization endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/authorization
    Key endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/jwks

3. MCP サーバーを設定する

MCP サーバーは、手順 2 で作成した SaaS アプリから access_token を取得するため、OAuth 2.0 認可フローを実行する必要があります。MCP サーバー上で OAuth クライアントを設定するときは、Access for SaaS アプリの OAuth エンドポイントと資格情報を貼り付けます。

サンプル MCP サーバー に OAuth エンドポイントと資格情報を追加します。

  1. Cloudflare ダッシュボード で、Workers & Pages ページを開きます。

    Workers & Pages を開く ↗
  2. mcp-server-cf-access Worker を選びます。

  3. Settings を開きます。

  4. Variables and Secrets で、各シークレットを Access for SaaS アプリ から取得した対応する値に更新します。

    Workers シークレット SaaS アプリの項目
    ACCESS_CLIENT_ID Client ID
    ACCESS_CLIENT_SECRET Client secret
    ACCESS_TOKEN_URL Token endpoint
    ACCESS_AUTHORIZATION_URL Authorization endpoint
    ACCESS_JWKS_URL Key endpoint
  5. COOKIE_ENCRYPTION_KEY には、次のコマンドでランダムな文字列を生成できます。

    openssl rand -hex 32

    このコマンドの出力を COOKIE_ENCRYPTION_KEY に入力します。

  1. 次の 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
  2. シークレット値の入力を求められたら、Access for SaaS アプリ から取得した対応する値を貼り付けます。

    Workers シークレット SaaS アプリの項目
    ACCESS_CLIENT_ID Client ID
    ACCESS_CLIENT_SECRET Client secret
    ACCESS_TOKEN_URL Token endpoint
    ACCESS_AUTHORIZATION_URL Authorization endpoint
    ACCESS_JWKS_URL Key endpoint
  3. Cookie 暗号化キー用のランダムな文字列を生成します。

    openssl rand -hex 32

    このコマンドの出力を Workers secret に保存します。

    npx wrangler secret put COOKIE_ENCRYPTION_KEY

4. 接続をテストする

https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcp の MCP サーバーへ、Workers AI PlaygroundMCP inspector、またはリモート MCP サーバーに対応する その他の MCP クライアント から接続できます。

Workers AI Playground でテストする手順は次のとおりです。

  1. Workers AI Playground を開きます。

  2. MCP Servers で、MCP サーバー URL に https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcp を入力します。

  3. Connect を選びます。

  4. MCP サーバーへのアクセスを求めるポップアップが表示されます。Approve を選びます。

  5. 表示に従い、アイデンティティプロバイダーへログインします。

Workers AI Playground に Connected と表示されます。MCP サーバーは Cloudflare Access から access_token を取得できるはずです。

次のステップ

MCP サーバーがユーザーに代わって、ほかのセルフホストアプリケーションへ認証済みリクエストを送れるようにするには、ダウンストリームアプリケーションに Linked App Token ポリシーを作成します。MCP サーバーは、Access から受け取った Cf-Access-Jwt-Assertion ヘッダーを、Cf-Access-Token ヘッダーとしてダウンストリームアプリケーションへ転送します。

役に立ちましたか?