コンテンツに移動
デベロッパー

わずか 10 分でリモート MCP サーバーを構築して Google Cloud Run にデプロイ

2025年6月27日
https://storage.googleapis.com/gweb-cloudblog-publish/images/mcp_on_cloud_run_hero_image.max-2500x2500.jpg
Jack Wotherspoon

Developer Advocate

※この投稿は米国時間 2025 年 6 月 18 日に、Google Cloud blog に投稿されたものの抄訳です。

ツールやデータソースのコンテキストを LLM に統合するのは容易ではなく、これが AI エージェントの開発において使いやすさに影響を及ぼしています。この課題に対処するために、Anthropic は Model Context Protocol(MCP)を発表しました。これは、アプリケーションが LLM にコンテキストを提供する方法を標準化するプロトコルです。たとえば、API 用の MCP サーバーを構築して、それを他の開発者が独自の AI アプリケーションのコンテキストとして使用できるようにしたいとします。この場合、デプロイ先として、Google Cloud Run が最適な選択肢となりえます。

このガイドでは、MCP サーバーのホストに関する Cloud Run の公式ドキュメントを直接参照しながら、独自のリモート MCP サーバーを簡単に設定する手順を示します。AI の取り組みにおけるコンテキストの活用方法に変革を起こしましょう。

MCP トランスポート

MCP はクライアント / サーバー アーキテクチャに従っており、しばらくの間は stdio トランスポートを使用したローカルでのサーバーの実行のみをサポートしていました。

その後 MCP は進化し、リモート アクセス トランスポートである streamable-httpsse をサポートするようになりました。サーバー送信イベント(SSE)は、最新の MCP 仕様ではストリーミング可能な HTTP に置き換えられて非推奨となりましたが、下位互換性のために引き続きサポートされています。これらの 2 つのトランスポートのどちらでも、MCP サーバーをリモートで実行できます。

Streamable HTTP を使用すると、サーバーは複数のクライアント接続を処理できる独立したプロセスとして動作します。このトランスポートは、HTTP の POST リクエストと GET リクエストを使用します。

サーバーは、POST メソッドと GET メソッドの両方をサポートする単一の HTTP エンドポイント パス(以下、MCP エンドポイントと呼びます)を提供する必要があります。たとえば、https://example.com/mcp のような URL になります。

さまざまなトランスポートについて詳しくは、MCP の公式ドキュメントをご覧ください。

MCP サーバーをリモートで実行するメリット

MCP サーバーを Cloud Run でリモートで実行すると、次のようなメリットがあります。

  • スケーラビリティ: Cloud Run は、すべての受信リクエストを処理するために迅速にスケールアウトするように構築されています。そのため、需要に応じて MCP サーバーを自動的にスケールしてくれます。

  • 集中型サーバー: 集中型 MCP サーバーへのアクセスを IAM 権限を通じてチームメンバーと共有できます。これにより、各自のローカルマシンからサーバーに接続でき、ローカルで独自のサーバーを実行する必要がなくなります。また、MCP サーバーに変更が加えられた場合はそれをチームメンバー全員が利用できます。

  • セキュリティ: Cloud Run では、リクエストの認証を簡単に必須化できます。これにより、MCP サーバーへの安全な接続のみが許可され、不正アクセスが防止されます。

重要: このセキュリティ上のメリットは非常に重要です。認証を強制適用しないと、公共のインターネット上の誰もが MCP サーバーにアクセスして呼び出せることになります。

前提条件

インストール

サーバーとデプロイのコードを保存するフォルダ mcp-on-cloudrun を作成します。

読み込んでいます...

では、uv を使用してプロジェクトを作成しましょう。uv は、高速でパワフルなパッケージおよびプロジェクト管理ツールです。

読み込んでいます...

上記のコマンドを実行すると、次の pyproject.toml が表示されます。

読み込んでいます...

次に、必要な追加ファイルとして、server.py(MCP サーバーコード用)、test_server.py(リモートサーバーのテスト用)、Dockerfile(Cloud Run のデプロイ用)を作成しましょう。

読み込んでいます...

これでファイル構造が完成しました。

読み込んでいます...

ファイル構造が完成したので、次に Google Cloud 認証情報を構成してプロジェクトを設定しましょう。

読み込んでいます...

数学 MCP サーバー

LLM は、非決定論的なタスク(意図の理解、創造的なテキストの生成、複雑なアイデアの要約、抽象的な概念の推論など)では優れていますが、決定論的なタスク(正解が 1 つしかないタスク)では、信頼性に欠けるという欠点があります。

決定論的ツールで LLM を強化して数学演算などを可能にすることは、ツールによって重要なコンテキストを提供して MCP で LLM の使用を改善する方法の一例です。

ここでは、FastMCP を使用して、addsubtract という 2 つのツールを持つ単純な数学 MCP サーバーを作成します。FastMCP は、MCP サーバーとクライアントを Python で迅速に構築するためののツールです。

pyproject.toml に FastMCP を依存関係として追加します。

読み込んでいます...

次のコードを数学 MCP サーバーの server.py にコピーして貼り付けます。

lang-py
読み込んでいます...

トランスポート

この例では、リモート サーバーに推奨されるトランスポートである streamable-http を使用していますが、下位互換性を考慮して sse を引き続き使用すこともできます。

sse を使用する場合は、server.py の最後の行を、transport="sse" を使用するように更新する必要があります。

Cloud Run へのデプロイ

では、単純な MCP サーバーを Cloud Run にデプロイしましょう。

以下のコードをコピーして空の Dockerfile に貼り付けます。このコードでは、uv を使用して server.py を実行します。

読み込んでいます...

ソースから直接デプロイすることも、コンテナ イメージを使用してデプロイすることもできます。

どちらの方法でも、--no-allow-unauthenticated フラグを使用して認証を必須にします。

これはセキュリティ上の理由から重要です。認証を必須にしない場合、誰でも MCP サーバーを呼び出すことができ、システムに損害を与える可能性があります。

方法 1 - ソースからデプロイする

読み込んでいます...

方法 2 - コンテナ イメージからデプロイする

コンテナ イメージを保存する Artifact Registry リポジトリを作成します。

読み込んでいます...

Cloud Build を使用してコンテナ イメージをビルドし、Artifact Registry に push します。

読み込んでいます...

MCP サーバーのコンテナ イメージを Cloud Run にデプロイします。

読み込んでいます...

いずれかの方法を完了すると、サービスが正常にデプロイされた場合、次のようなメッセージが表示されます。

読み込んでいます...

MCP クライアントの認証

--no-allow-unauthenticated を指定して認証を必須にしたため、リモート MCP サーバーに接続する MCP クライアントは認証を受ける必要があります。

Cloud Run で MCP サーバーをホストする方法に関する公式ドキュメントで、MCP クライアントの実行場所別にこのトピックに関する詳細情報を提供しています。

この例では、Cloud Run プロキシを実行して、ローカルマシンでリモート MCP サーバーへの認証済みトンネルを作成します。

デフォルトでは、Cloud Run サービスの URL では、すべてのリクエストに Cloud Run 起動元roles/run.invoker)IAM ロールによる認可が必要です。この IAM ポリシー バインディングにより、ローカル MCP クライアントの認証に強力なセキュリティ メカニズムが使用されます。

リモート MCP サーバーにアクセスしようとしているチームメンバーに、IAM プリンシパル(Google Cloud アカウント)にバインドされた roles/run.invoker IAM ロールがあることを確認します。

注: 次のコマンドを実行すると、Cloud Run プロキシがまだインストールされていない場合は、ダウンロードを求めるプロンプトが表示されることがあります。その場合は、プロンプトに従ってダウンロードとインストールを行います。

読み込んでいます...

次の出力が表示されます。

読み込んでいます...

これで、http://127.0.0.1:8080 へのすべてのトラフィックが認証され、リモート MCP サーバーに転送されます。

リモート MCP サーバーのテスト

http://127.0.0.1:8080/mcp(ここでは Streamable HTTP トランスポートを使用しているため、末尾が /mcp です)に接続する FastMCP クライアントを使用してリモート MCP サーバーに接続し、add ツールと subtract ツールを呼び出してテストしましょう。

空の test_server.py ファイルに次のコードを追加します。

lang-py
読み込んでいます...

注: テストサーバーを実行する前に、Cloud Run プロキシが実行されていることを確認してください。

新しいターミナルで、次のコマンドを実行します。

読み込んでいます...

次の出力が表示されます。

読み込んでいます...

これで完了です。リモート MCP サーバーを Cloud Run にデプロイし、FastMCP クライアントを使用してテストしました。

Cloud Run への AI アプリケーションのデプロイについて詳しくは、Google I/O での発表に関するこちらのブログ投稿で、AI アプリを Cloud Run に簡単にデプロイする方法の最新情報をご確認ください。

関連情報

-デベロッパー アドボケイト、Jack Wotherspoon

投稿先