このチュートリアルでは、ストリーミング可能な HTTP トランスポートを使用するリモート Model Context Protocol(MCP)サーバーを構築し、Cloud Run にデプロイする方法について説明します。ストリーミング可能な HTTP トランスポートを使用する MCP サーバーは、複数のクライアント接続を処理できる独立したプロセスとして動作します。
目標
このチュートリアルの内容は次のとおりです。
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- 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.
-
Verify 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Run Admin API, and Cloud Build APIs.
- Google Cloud プロジェクトで Cloud Run 開発環境を設定します。
- サービスをデプロイするための適切な権限があり、使用するアカウントに Cloud Run 管理者(
roles/run.admin
)とサービス アカウント ユーザー(roles/iam.serviceAccountUser
)のロールが付与されていることを確認します。 - アカウントに Cloud Run 起動元(
roles/run.invoker
)ロールを付与します。このロールにより、リモート MCP サーバーから Cloud Run サービスにアクセスできます。 -
Google Cloud コンソールで、[IAM] ページに移動します。
IAM に移動 - プロジェクトを選択します。
- [ アクセスを許可] をクリックします。
-
[新しいプリンシパル] フィールドに、ユーザー ID を入力します。これは通常、Cloud Run サービスのデプロイに使用する Google アカウントのメールアドレスです。
- [ロールを選択] リストでロールを選択します。
- 追加のロールを付与するには、[ 別のロールを追加] をクリックして各ロールを追加します。
- [保存] をクリックします。
- PROJECT_NUMBER: Google Cloud プロジェクトの番号。
- PROJECT_ID: Google Cloud プロジェクト ID。
- PRINCIPAL: ロールを付与するアカウントのメールアドレス。
- ROLE: デプロイを実行するアカウントに付与するロール。
ドメイン制限の組織のポリシーでプロジェクトの未認証呼び出しが制限されている場合は、限定公開サービスのテストの説明に従って、デプロイされたサービスにアクセスする必要があります。
- Python のパッケージおよびプロジェクト管理ツールである uv をインストールします。
ロールの付与方法を確認する
コンソール
gcloud
プロジェクトで自分のアカウントに必要な IAM ロールを付与するには:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
次のように置き換えます。
Python プロジェクトを準備する
以下の手順では、uv
パッケージ マネージャーを使用して Python プロジェクトを設定する方法について説明します。
デプロイ用のソースコードを保存する、
mcp-on-cloudrun
という名前のフォルダを作成します。mkdir mcp-on-cloudrun cd mcp-on-cloudrun
uv
ツールを使用して Python プロジェクトを作成し、pyproject.toml
ファイルを生成します。uv init --name "mcp-on-cloudrun" --description "Example of deploying an MCP server on Cloud Run" --bare --python 3.10
uv init
コマンドにより、次のpyproject.toml
ファイルが作成されます。[project] name = "mcp-server" version = "0.1.0" description = "Example of deploying an MCP server on Cloud Run" readme = "README.md" requires-python = ">=3.10" dependencies = []
次の新しいファイルを追加で作成します。
server.py
: MCP サーバーのソースコード用test_server.py
: リモート サーバーのテスト用- Cloud Run にデプロイするための Dockerfile
touch server.py test_server.py Dockerfile
プロジェクト ディレクトリは次の構造になっている必要があります。
├── mcp-on-cloudrun │ ├── pyproject.toml │ ├── server.py │ ├── test_server.py │ └── Dockerfile
算術演算用の MCP サーバーを作成する
LLM の使用を改善するための重要なコンテキストを MCP によって提供するには、FastMCP を使用して数学 MCP サーバーを設定します。FastMCP は、Python で MCP のサーバーとクライアントを迅速に構築するためのツールです。
加算や減算などの数学演算用の MCP サーバーを作成する手順は次のとおりです。
次のコマンドを実行して、
pyproject.toml
ファイルに FastMCP を依存関係として追加します。uv add fastmcp==2.8.0 --no-sync
server.py
ファイルに次の数学 MCP サーバーのソースコードを追加します。uv
ツールを使用してserver.py
ファイルを実行するため、Dockerfile に次のコードを追加します。
Cloud Run にデプロイする
MCP サーバーは、コンテナ イメージまたはソースコードとしてデプロイできます。
コンテナ イメージ
コンテナ イメージとしてパッケージ化された MCP サーバーをデプロイするには、次の手順を行います。
コンテナ イメージを保存する Artifact Registry リポジトリを作成します。
gcloud artifacts repositories create remote-mcp-servers \ --repository-format=docker \ --location=us-central1 \ --description="Repository for remote MCP servers" \ --project=PROJECT_ID
Cloud Build を使用してコンテナ イメージをビルドし、Artifact Registry に push します。
gcloud builds submit --region=us-central1 --tag us-central1-docker.pkg.dev/PROJECT_ID/remote-mcp-servers/mcp-server:latest
MCP サーバーのコンテナ イメージを Cloud Run にデプロイします。
gcloud run deploy mcp-server \ --image us-central1-docker.pkg.dev/PROJECT_ID/remote-mcp-servers/mcp-server:latest \ --region=us-central1 \ --no-allow-unauthenticated
ソース
リモート MCP サーバーは、ソースから Cloud Run にデプロイできます。
ソースからデプロイするには、次のコマンドを実行します。
gcloud run deploy mcp-server --no-allow-unauthenticated --region=us-central1 --source .
MCP クライアントを認証する
--no-allow-unauthenticated
フラグを使用してサービスをデプロイした場合、リモート MCP サーバーに接続する MCP クライアントには認証が必要です。
サービス アカウントに Cloud Run 起動元ロール(
roles/run.invoker
)を付与します。この Identity and Access Management のポリシー バインディングにより、ローカル MCP クライアントの認証に強力なセキュリティ メカニズムが使用されます。ローカルマシンで Cloud Run プロキシを実行して、リモート MCP サーバーへの認証済みトンネルを作成します。
gcloud run services proxy mcp-server --region=us-central1
Cloud Run プロキシがまだインストールされていない場合、このコマンドを実行すると、プロキシのダウンロードを求めるプロンプトが表示されます。プロンプトに従ってプロキシのダウンロードとインストールを行ってください。
Cloud Run は http://127.0.0.1:8080
へのすべてのトラフィックを認証し、リクエストをリモート MCP サーバーに転送します。
リモート MCP サーバーをテストする
リモート MCP サーバーに接続してテストするため、FastMCP クライアントを使用して URL http://127.0.0.1:8080/mcp
にアクセスします。
加算と減算のメカニズムをテストして呼び出す手順は次のとおりです。
テストサーバーを実行する前に、Cloud Run プロキシを実行します。
test_server.py
というテストファイルを作成し、次のコードを追加します。新しいターミナルで、テストサーバーを実行します。
uv run test_server.py
次の出力が表示されます。
🛠️ Tool found: add 🛠️ Tool found: subtract 🪛 Calling add tool for 1 + 2 ✅ Result: 3 🪛 Calling subtract tool for 10 - 3 ✅ Result: 7
クリーンアップ
Google Cloud アカウントに追加料金が課されるのを回避するには、このチュートリアルでデプロイしたリソースをすべて削除します。
プロジェクトを削除する
このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで行った変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
チュートリアル リソースを削除する
このチュートリアルでデプロイした Cloud Run サービスを削除します。Cloud Run サービスの費用は、リクエストを受け取るまで発生しません。
Cloud Run サービスを削除するには、次のコマンドを実行します。
gcloud run services delete SERVICE-NAME
SERVICE-NAME は、サービスの名前に置き換えます。
Cloud Run サービスは Google Cloud コンソールで削除することもできます。
チュートリアルの設定時に追加した
gcloud
のデフォルトのリージョン構成を削除します。gcloud config unset run/region
プロジェクト構成を削除します。
gcloud config unset project