本記事は 2025年6月25日 に更新された「Secure and Deploy Remote MCP Servers with Auth0 and Cloudflare」を翻訳した記事です。
TL;DR - Auth0 は Cloudflare と協力し、リモート MCP サーバーを構築する開発者が認証と認可をより簡単に実装できるようにします。リモート MCP サーバーは、AI アプリケーションが外部サービスに安全にアクセスする方法を提供します。本記事では、外部サービスにアクセスするリモート MCP サーバーを Cloudflare Workers で構築し、Auth0 を使用して安全にする方法を詳しく説明します。サンプルの Todo API を外部サービスとして使用します。
MCP サーバーとは何か?
開発者は開発やデプロイに大規模言語モデル (LLM) や AI アプリケーションを使用しています。これらのアプリケーションは LLM がすでに学習したデータを使用する場合に優れていますが、外部サービスに接続してさらに多くの情報を取得できたらどうでしょうか。そこで Model Context Protocol (MCP) です。MCP は、標準化された方法で LLM が外部ツールや API に接続するためのプロトコルです。MCP を使用すると、AI アプリケーションは各 API の仕様を知らなくても外部サービスに接続できます。MCP は、クライアントサーバーのモデルを使用してこれを実現します。
- MCP クライアント — クライアントは、LLM ベースのアプリケーション内から MCP サーバーへの接続を維持します。
- MCP サーバー — サーバーは常に実行され、MCP クライアントからの呼び出しを待機します。
リモート MCP サーバーはインターネットからアクセスできます。ユーザーはサインインし、使い慣れた認可フローを使用して MCP クライアントに権限を付与できます。これにより、ローカルマシンで MCP サーバーを実行したくないが、API 操作を行いたいユーザーにとって、新しい方法になります。
Auth0 と Cloudflare でリモート MCP サーバーを保護する
Auth0 は Cloudflare Workers を利用したリモート MCP サーバーの保護を開発者が実装できるように Cloudflare と協力してきました。MCP の採用が急速に進む中、Cloudflare は技術進化に追随して行っています。Cloudflare は認可の実装を容易にする OAuth プロバイダーである workers-oauth-provider
の提供をはじめとして、リモート MCP サーバー構築の困難な部分に対応するための機能をプラットフォームに追加 しています。MCP サーバーを Auth0 で保護する ことにより、AI アプリケーションはリモート MCP サーバー経由で接続し、認証済みユーザーの代わりに API 呼び出しを行って、外部 API と対話できます。
本ブログ記事の残りの部分では、実践的な例を順を追って説明します。Auth0 によって保護された MCP サーバーを使用して、AI アプリケーションがサンプルの Todos API に接続するようにセットアップして使用します。サーバーと API は Cloudflare Workers プロジェクトであり、アクセス トークンとリフレッシュ トークンを要求して受け取るのに Auth0 を使用します。
まず、必要なアカウントを作成して Todos API をセットアップし、次に Auth0 に接続する MCP サーバーをデプロイして設定します。最後には、MCP クライアントが Todos API に情報を要求できるようになります。
はじめに
手順を行うにはローカルの開発環境をセットアップする必要があります。以下を準備してください。:
- Auth0 アカウントを作成します。
- Cloudflare アカウントを作成します。
- Visual Studio Code (またはお好みのコードエディター) をインストールします。
アカウントを作成したら、以下をインストールします。
Todo API とリモート Auth0 MCP サーバーのサンプルアプリケーションを取得する
サンプルの Todos API とリモート MCP サーバーは Cloudflare AI monorepo 内にあります。リポジトリをクローンし、各アプリケーションに移動して、ターミナルで次のコマンドを使用して依存関係をインストールします。
Todos API:
git clone https://github.com/cloudflare/ai.git
cd ai/demos/remote-mcp-auth0/todos-api
npm install
Todos API は Hono web framework で構築されています。
リモート MCP サーバー:
cd ../mcp-auth0-oidc
npm install
両方のプロジェクトをローカルで利用可能にし、依存関係をインストールしたら、次のステップに進み、Todos API を Auth0 で保護します。
Auth0 で Todos API を 設定する
Todos API を Auth0 で保護するように設定しましょう。設定すると、Auth0 は Todos API 向けのアクセストークンやリフレッシュトークンを作成することができるようになり、トークンを受け取ったリモート MCP サーバーはエンドユーザーに代わってアクションを実行できます。開始するには、Auth0 アカウントにログインして Auth0 ダッシュボードにアクセスします。
Auth0 ダッシュボードで Applications > APIs に移動して API を作成します。Create API をクリックします。以下のフィールドに次の値を入力します。
- Name フィールドに、「Todos API」と入力します。
- Identifier フィールドに、
urn:todos-api
と入力します。この値は、MCP サーバーが Todos API のために認可呼び出しを行う際のaudience
パラメーターとして使用されます。 - Create ボタンを押します。
次のステップでは、リモート MCP サーバーから要求されたときにリフレッシュ トークンを取得できるようにします。Applications > APIs に移動し、Todos API のエントリをクリックします。Settings にアクセスし、Access Settings までスクロールダウンして、Allow Offline Access ボタンをトグルして有効にします。そして Save をクリックします。
Allow Offline Access をオンにすると、MCP サーバーが リフレッシュ トークン を取得できるようになり、アクセス トークンの有効期限が切れてもユーザーが再認証する必要がなくなります。
最後に、Auth0 ダッシュボードでパーミッション (スコープ) を設定する必要があります。設定したパーミッションは、ユーザーがアプリケーションに API へのアクセスを認可する際に付与することができます。Todos API の API 設定で Permissions タブに移動し、パーミッション名として read:todos
と read:billing
を入力し、説明を追加し、+ Add ボタンを押してパーミッションを登録します。
パーミッションを設定したら、Todos API のための Auth0 内で作成および設定は完了です。Todos API に Auth0 の情報を設定する必要があります。
お好みのコードエディターで Todos API プロジェクトを開き、Auth0 ダッシュボードで作成した API 設定を利用するための設定値を追加し、Wrangler CLI を使ってデプロイします。
Todos API プロジェクトのルートに、.dev.vars
ファイルを作成します。ファイルは次のような形式になります。:
AUTH0_DOMAIN=
AUTH0_AUDIENCE=urn:todos-api
AUTH0_AUDIENCE
には API を作成したときに定めた値を入力します。次に、Auth0 ドメインを入力する必要があります。
Auth0 ダッシュボードで新しい API を作成するたびに、アクセス トークンを取得したり、保護された API へのリクエストを行ったりするためのテストアプリケーションも自動的に作成されています。Applications > Applications でテストアプリケーションを確認できます。
ダッシュボードの Applications 一覧から「Todos API (Test Application)」をクリックすると、設定が表示され、Domain の値をコピーできます。
.dev.vars
ファイルを更新して、次のようにドメインを含めます。:
AUTH0_DOMAIN=Auth0 ドメイン (例:acme.auth0.com)
AUTH0_AUDIENCE=urn:todos-api
Todos API をテストする
Todos API を Auth0 とローカルの両方で設定したので、リクエストを送信できます。
次のコマンドで Todos API を実行します。:
cd ../todos-api
npm run dev
これによりワーカーが起動し、Todos API にリクエストを送信できるようになります。
API を呼び出すための access_token
を取得するには、Auth0 ダッシュボードで Applications > APIs を開き、Todos API をクリックしてから Test タブを選択します。アクセス トークンを要求するための cURL コマンドが表示されます。
ターミナルで Test タブのコマンドを実行します。ダッシュボード上のコマンドに含まれている Auth0 ドメイン、client_id
、client_secret
の値を必ず使用してください。
curl --request POST \
--url https://dev-aggvwbxi.us.auth0.com/oauth/token \
--header 'content-type: application/json' \
--data '{"client_id":".....","client_secret":".....","audience":"urn:todos-api","grant_type":"client_credentials"}'
cURL コマンドは、以下のようにアクセス トークンを含む結果を返します。:
{
"access_token": ".......",
"token_type": "Bearer"
}
次に、Authorization ヘッダーでアクセストークンを渡して API にリクエストを送信します。
curl --request GET \
--url http://localhost:8789/api/me \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6Im...'
呼び出しが成功すると、結果に JWT トークンのクレームが返されます。
Todos API を Cloudflare にデプロイする
Todos API は Cloudflare Workers のプロジェクトで、Wrangler コマンドでデプロイできます。これまでに準備したものを使用して、Wrangler でローカルにシークレットを設定し、API を Cloudflare にデプロイできます。ターミナルを使用して、プロジェクトフォルダーに移動し、次のコマンドを実行します。:
wrangler secret put AUTH0_DOMAIN
wrangler secret put AUTH0_AUDIENCE
シークレットが設定されたので、次のコマンドで Todos API を Cloudflare にデプロイします。:
wrangler deploy
これで、Todos API は Cloudflare にデプロイされ、Auth0 によって保護されています。
Cloudflare ダッシュボードの Compute (Workers) > Workers & Pages で、todos-api を開きます。Settings タブの Domains & Routes セクションで、workers.dev の値をメモします。デプロイされた Todos API にアクセスするためのドメインです。
リモート MCP サーバーの設定とデプロイ
このステップでは、Auth0 で保護されたリモート MCP サーバーを設定し、Todos API にリクエストを送信します。このために、Auth0 ダッシュボードでアプリケーションを作成し、Cloudflare にデプロイします。
Auth0 ダッシュボードに戻り、Applications > Applications に移動して Web アプリケーションを作成します。Create Application をクリックし、次の値を入力します。:
- Name フィールドに、「Remote MCP Server」と入力します。
- アプリケーションタイプとして Regular Web Applications を選択します。
- Create ボタンをクリックします。
次に、ユーザー認証後に呼び出し元にリダイレクトされるアプリケーションの URL であるコールバック URL を設定します。設定するために、MCP サーバーアプリケーションの Settings に移動し、Application URIs セクションの Allowed Callback URLs までスクロールして、次の URL を設定します。:
http://localhost:8789/callback
注意: この URL はデプロイした後に変わります。
Auth0 ダッシュボードで Connections タブに移動し、デフォルトで作成される Database の Username-Password-Authentication が有効になっていることを確認します。有効になっていない場合は、有効にします。
次は、Cloudflare Workers KV 名前空間の作成です。この名前空間は、リモート MCP サーバーと workers-oauth-provider
が認可リクエストを処理するために使用します。
Wrangler で KV 名前空間 を作成するには、ターミナルで次のコマンドを実行します。:
wrangler kv namespace create "OAUTH_KV"
コードエディターで Remote MCP Server プロジェクトを開き、wrangler.jsonc
ファイル内の <BINDING_ID>
をコマンドの実行結果の値で置き換えて、保存します。:
//wrangler.jsonc { "kv_namespaces": [ { "binding": "OAUTH_KV", "id": "<BINDING_ID>" } ] }
KV 名前空間を作成したので、次のステップは Wrangler の設定値を更新して、リモート MCP サーバーを Cloudflare にデプロイすることです。アプリケーションを設定するには、Auth0 ダッシュボードのアプリケーション設定からいくつかの値が必要です。
Applications > Applications に移動し、Remote MCP Server アプリケーションをクリックします。表示された Auth0 ドメイン、クライアント ID、クライアントシークレットをメモします。
mcp-auth0-oidc
プロジェクトのルートに .dev.vars
ファイルを作成し、次の値を追加します。
AUTH0_DOMAIN=Auth0 ドメイン (例: acme.auth0.com)
AUTH0_CLIENT_ID=Auth0 で作成したアプリケーションのクライアント ID
AUTH0_CLIENT_SECRET=Auth0 で作成したアプリケーションのクライアントシークレット
AUTH0_AUDIENCE=urn:todos-api
AUTH0_SCOPE=openid email profile offline_access read:todos
NODE_ENV=development
API_BASE_URL=Cloudflare にデプロイされた Todos API のドメインに https:// を付けた URL
MCP サーバーを Cloudflare にデプロイする
リモート MCP サーバーを Cloudflare にデプロイするには、まず Wrangler でシークレットを設定する必要があります。これには次のコマンドを実行します。:
wrangler secret put AUTH0_DOMAIN
wrangler secret put AUTH0_CLIENT_ID
wrangler secret put AUTH0_CLIENT_SECRET
wrangler secret put AUTH0_AUDIENCE
wrangler secret put AUTH0_SCOPE
wrangler secret put API_BASE_URL
シークレットが設定されたら、次のコマンドを実行して MCP サーバーを Cloudflare にデプロイします。
wrangler deploy
MCP サーバーがデプロイされたので、Cloudflare ダッシュボードでデプロイされた MCP サーバーのドメインを確認し、Auth0 ダッシュボード内のアプリケーション設定で Allowed Callback URLs を更新します。
Allowed Callback URLs を変更するには、Auth0 ダッシュボードで Applications > Applications に移動し、Settings をクリックし、Application URIs までスクロールダウンして、次の形式の URL を追加します。
https://mcp-auth0-oidc.<your-subdomain>.workers.dev/callback
これにより、ユーザーが認証した後、Todos API を呼び出すためにリモート MCP サーバーにリダイレクトして戻されます。準備ができたので、リモート MCP サーバーの動作を確認します。
リモート MCP サーバーの呼び出しをテストする
Todos API への呼び出しをテストするには、Workers AI LLM Playground を使用します。Cloudflare の AI Playground に移動し、リモート MCP サーバーの URL に接続します。:
https://mcp-auth0-oidc.<your-subdomain>.workers.dev/sse
URL を MCP Servers というラベルのセクションに入力し、Connect をクリックします。
認可フローが開始されます。アクセスを許可する必要があります。:
ブラウザで新しいウィンドウが開き、ユーザーは Auth0 で認証します。これにより、リモート MCP サーバーが Todos API のリソースにアクセスできるようになります。
権限が付与されると、LLM を使用して MCP サーバーにリクエストを送信し、Todos API から情報を取得できます。
Todos API は、Todo と請求情報へのアクセスを提供します。請求情報のリクエストは失敗することに注意してください。これは、LLM が権限を持つ情報に対してのみアクセスできることを示しています。
Claude でリモート MCP サーバーを設定
Auth0 でリモート MCP サーバーを保護し、Cloudflare にデプロイする方法を理解しましたので、お気に入りの MCP ホストに設定する方法を確認しましょう。ここでは Claude Desktop に MCP サーバーを設定します。
Claude Desktop を開き、Settings に移動し、Developer をクリックして Edit Config を選択します。コンピュータ上の Claude のフォルダーと claude_desktop_config.json
という名前のファイルが表示されます。
お好みのエディターでファイルを開き、次を追加します。:
{ "mcpServers": { "math": { "command": "npx", "args": [ "mcp-remote", "https://mcp-auth0-oidc.<your-subdomain>.workers.dev/sse" ] } } }
ファイルを編集し、引数リスト内のリモート MCP サーバーの URL を Cloudflare にデプロイされた URL に更新してください。この設定は、npx
コマンドを mcp-remote
パッケージと URL をパラメータとして渡して実行する MCP サーバーを「math
」という名前で登録します。
mcp-remote
パッケージ は、Claude Desktop や Cursor のような stdio
を利用できる MCP ホストを、デプロイしたばかりのリモート MCP サーバーに安全にアクセスするために接続する役割を担います。
ファイルを保存して Claude を再起動すると、Todo リストについて Claude にプロンプトを出せるようになります。
まとめ
本記事では Auth0 で MCP サーバーを保護し、サードパーティ API に接続するために必要な手順を順を追って説明しました。また、MCP サーバーを Cloudflare にデプロイする方法も学びました。MCP サーバーは Auth0 をサードパーティの IdP として使用し、AI ツールがユーザーの代わりに保護された API を呼び出すことを許可します。
リモート MCP サーバーは、LLM をより便利にし、ユーザーにとって重要な情報へのより迅速なアクセスを提供できるツールを提供します。生成 AI アプリケーションを構築されている場合は、当社の新しい製品 Auth for GenAI を確認ください。AI エージェントが、わずか数行のコードで安全にツールやワークフローにアクセスでき、きめ細かな制御をしながらデータにアクセスできるようになります。
このデモで使用したコードを Github で確認し、ご自身で試して頂けます。
本ブログには、Okta 以外のウェブサイトへのハイパーリンクが含まれています。これらのウェブサイトは第三者によって作成・維持されており、そのコンテンツについては当該第三者が単独で責任を負います。