このガイドでは、Model Context Protocol(MCP)サーバーをストリーミング可能な HTTP トランスポートを使って Cloud Run 上でホストする方法と、MCP クライアントの認証手順について説明します。MCP を初めて使用する場合は、概要ガイドで詳細をご覧ください。
MCP は、AI エージェントが環境とやり取りする方法を標準化するオープン プロトコルです。AI エージェントは MCP クライアントをホストしており、やり取りするツールやリソースは MCP サーバーです。MCP クライアントは、次の 2 つの異なるトランスポート タイプを介して MCP サーバーと通信できます。
MCP クライアントとサーバーを同じローカルマシン上でホストすることも、MCP クライアントをローカルでホストして Cloud Run のようなクラウド プラットフォームでホストされているリモート MCP サーバーと通信することも、MCP クライアントとサーバーの両方をクラウド プラットフォーム上でホストすることも可能です。
Cloud Run は、ストリーミング可能な HTTP トランスポートを使う MCP サーバーのホスティングには対応していますが、stdio トランスポートを使う MCP サーバーのホスティングには対応していません。
このページのガイダンスは、独自の MCP サーバーを開発する場合や、既存の MCP サーバーを使用している場合に適用されるものです。
- 独自の MCP サーバーを開発する: 公式の Python、TypeScript、Java、Kotlin SDK や FastMCP などの MCP サーバー SDK を使用して MCP サーバーを開発することをおすすめします。
- 既存の MCP サーバーを使用する: 公式およびコミュニティ製の MCP サーバーの一覧は、MCP サーバー GitHub リポジトリで確認できます。Docker Hub にも厳選された MCP サーバーの一覧が掲載されています。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Google Cloud プロジェクトで Cloud Run 開発環境を設定します。
- 適切なサービス デプロイ権限を持ち、ご利用のアカウントに Cloud Run 管理者(
roles/run.admin
)とサービス アカウント ユーザー(roles/iam.serviceAccountUser
)のロールが付与されていることを確認します。 -
Google Cloud コンソールで、[IAM] ページに移動します。
IAM に移動 - プロジェクトを選択します。
- [ アクセスを許可] をクリックします。
-
[新しいプリンシパル] フィールドに、ユーザー ID を入力します。このユーザー ID は通常、Cloud Run サービスのデプロイに使用される Google アカウントのメールアドレスです。
- [ロールを選択] リストでロールを選択します。
- 追加のロールを付与するには、[ 別のロールを追加] をクリックして各ロールを追加します。
- [保存] をクリックします。
- PROJECT_NUMBER は Google Cloud プロジェクト番号に置き換えます。
- PROJECT_ID は実際の Google Cloud プロジェクト ID に置き換えます。
- PRINCIPAL は権限を付与するアカウントに置き換えます。これは通常、Cloud Run サービスのデプロイに使用される Google アカウントのメールアドレスです。
- ROLE はデプロイするアカウントに付与するロールに置き換えます。
IMAGE_URL
はコンテナ イメージの URL に置き換えます(例:us-docker.pkg.dev/cloudrun/container/mcp
)。PORT
はリッスンするポートに置き換えます(例:3000
)。MCP サーバーの Git リポジトリのクローンを作成します。
git clone https://github.com/ORGANIZATION/REPOSITORY.git
MCP サーバーのルートに移動します。
cd REPOSITORY
次の gcloud CLI コマンドを使用して Cloud Run にデプロイします。
gcloud run deploy --source .
- MCP_SERVER_NAME は、Cloud Run サービスの名前に置き換えます。
- REGION はサービスをデプロイした Google Cloudリージョンに置き換えます。例:
europe-west1
- Cloud Run で AI エージェントをホストする
- チュートリアルに沿って、10 分以内にリモート MCP サーバーを構築して Cloud Run にデプロイします。
ロールの付与方法を確認する
コンソール
gcloud
プロジェクトで自分のアカウントに必要な IAM ロールを付与するには:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
次のように置き換えます。
リモート SSE またはストリーミング可能な HTTP MCP サーバーをホストする
サーバー送信イベント(SSE)またはストリーミング可能な HTTP トランスポートを使用する MCP サーバーは、MCP クライアントからリモートでホストできます。
このタイプの MCP サーバーを Cloud Run にデプロイするには、MCP サーバーのパッケージ化方法に応じて、MCP サーバーをコンテナ イメージとして、またはソースコード(通常は Node.js または Python)としてデプロイします。
コンテナ イメージ
コンテナ イメージとして配布されているリモート MCP サーバーは、特定のポートで HTTP リクエストをリッスンするウェブサーバーです。つまり、Cloud Run のコンテナ ランタイム仕様に準拠しているため、Cloud Run サービスとしてデプロイすることが可能です。
コンテナ イメージとしてパッケージ化された MCP サーバーをデプロイするには、コンテナ イメージの URL と、リクエストを受信する予定のポートが必要です。これらは、次の gcloud CLI コマンドを使用してデプロイできます。
gcloud run deploy --image IMAGE_URL --port PORT
次のように置き換えます。
ソース
コンテナ イメージとして提供されていないリモート MCP サーバーは、特に Node.js または Python で記述されている場合は、ソースから Cloud Run にデプロイできます。
HTTP ベースの MCP サーバーを Cloud Run にデプロイすると、その MCP サーバーには HTTPS の URL が割り当てられ、通信には Cloud Run に標準で備わっている HTTP レスポンスのストリーミング機能を利用できるようになります。
MCP クライアントを認証する
MCP クライアントをホストした場所に応じて、該当するセクションをご覧ください。
ローカル MCP クライアントを認証する
MCP クライアントをホストする AI エージェントがローカルマシンで実行されている場合は、次のいずれかの方法で MCP クライアントを認証します。
詳細については、認証に関する MCP 仕様をご覧ください。
IAM 起動元権限
デフォルトでは、Cloud Run サービスの URL では、すべてのリクエストに Cloud Run 起動元(roles/run.invoker
)IAM ロールによる承認が必要です。この IAM ポリシー バインディングにより、強力なセキュリティ メカニズムがローカル MCP クライアントの認証に使用されます。
MCP サーバーをリージョンの Cloud Run サービスにデプロイしたら、ローカルマシンで Cloud Run プロキシを実行して、独自の認証情報を使用してリモート MCP サーバーをクライアントに安全に公開します。
gcloud run services proxy MCP_SERVER_NAME --region REGION --port=3000
次のように置き換えます。
Cloud Run のプロキシ コマンドは、ポート 3000
にローカル プロキシを作成し、リモート MCP サーバーにリクエストを転送して ID を挿入します。
MCP クライアントの MCP 構成ファイルを次のように更新します。
{
"mcpServers": {
"cloud-run": {
"url": "http://localhost:3000/sse"
}
}
}
MCP クライアントが url
属性をサポートしていない場合は、mcp-remote
npm パッケージを使用します。
{
"mcpServers": {
"cloud-run": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:3000/sse"
]
}
}
}
OIDC ID トークン
MCP クライアントがヘッダーを公開するか、カスタム認証トランスポートを提供する方法を使用するかに応じて、OIDC ID トークンを使用して MCP クライアントを認証することを検討してください。
さまざまな Google 認証ライブラリ(Python 用 Google Auth ライブラリなど)を使用して、ランタイム環境から ID トークンを取得できます。このトークンには、カスタム オーディエンスを使用しない限り、受信側のサービスの *.run.app
URL に一致する正しいオーディエンス クレームが必要です。また、クライアント リクエスト(Authorization: Bearer <token value>
など)に ID トークンを含める必要があります。
MCP クライアントがヘッダーまたはトランスポートのいずれも公開していない場合は、別の認証方法を使用します。
Cloud Run で実行されている MCP クライアントを認証する
MCP クライアントをホストする AI エージェントが Cloud Run で実行されている場合は、次のいずれかの方法で MCP クライアントを認証します。
MCP サーバーをサイドカーとしてデプロイする
MCP サーバーは、MCP クライアントが実行されているサイドカーとしてデプロイできます。
MCP クライアントと MCP サーバーが同じインスタンスにあるため、このユースケースでは特別な認証は必要ありません。クライアントは、http://localhost:PORT
のポートを使用して MCP サーバーに接続できます。PORT は、Cloud Run サービスへのリクエストの送信に使用されるポートとは異なるポートに置き換えます。
サービス間認証を行う
MCP サーバーおよび MCP クライアントが個別の Cloud Run サービスとして実行されている場合は、サービス間認証をご覧ください。
Cloud Service Mesh を使用する
MCP クライアントをホストするエージェントは、Cloud Service Mesh を使用してリモートの MCP サーバーに接続できます。
メッシュに短い名前を持つように MCP サーバー サービスを構成できます。MCP クライアントは、短い名前 http://mcp-server
を使用して MCP サーバーと通信できます。認証はメッシュによって管理されます。