電通総研 テックブログ

電通総研が運営する技術ブログ

Cloud Run×MCP:MCPサーバをCloudRunにホストして、CloudRunを操作する

こんにちは、スマートソサエティセンターの飯田です。

今回は、 Google CloudのCloud RunとMCPサーバ関連で下記の2つをご紹介します。

  1. Google CloudのCloud Run上にMCPサーバをホスティング
  2. ホスティングされたMCP サーバでCloud Runを操作する

きっかけは、このGoogleのテックブログでして、CloudRun×MCPを触ってみようと思いました
cloud.google.com

MCP(Model Context Protocol)とは

MCPはアプリケーションがLLMにコンテキストを提供する方法を標準化するオープンプロトコル(anthropicより引用) です。

誤解を恐れずに簡単に言うと、これまで各社がバラバラに作っていた「LLMと外部ツールを繋ぐ仕組み」に共通の規格を設けようという取り組みです。この規格に沿ってツール(プログラム)を作っておけば、様々なLLMから再利用しやすくなり、開発のエコシステムが活性化する、というメリットがあります。

Cloud Runとは

Cloud Runは、Google Cloudが提供するフルマネージドなサーバーレスプラットフォームです。コンテナ化されたアプリケーションを自動的にスケールさせながら実行できます。

サーバーの管理を気にする必要がなく、使った分だけの課金なので、コストを抑えつつ、高い拡張性を持つアプリケーションを開発できるのが特徴です。 
cloud.google.com

【実践】Cloud RunにMCPサーバをホスティング

今回は、主に下記の2つのページを参考にしています。2つの公式ドキュメントに沿って実施していけば動かせると思います。

https://cloud.google.com/run/docs/host-mcp-servers?hl=ja
https://github.com/GoogleCloudPlatform/cloud-run-mcp

全体構成は下記のイメージです。

細かい手順はREADMEに書いてあるので、StepByStepでは書きませんが、大まかな流れを・・・。

1. MCPサーバをCloudRunにホスティングする

gcloud run deploy cloud-run-mcp --image us-docker.pkg.dev/cloudrun/container/mcp --no-allow-unauthenticated

この処理では、CloudRunを操作するMCPサーバのDockerコンテナがus-docker.pkg.dev/cloudrun/container/mcp に格納されているので、そこからCloudRunにコンテナをデプロイしています。

2. デプロイ結果の確認

GCPコンソールからも確認できます

3. Cloud Run proxyを実行し、認証させる

gcloud run services proxy cloud-run-mcp --port=3000 --region=REGION --project=PROJECT_ID


今回はまず動かしてみるということで、簡単に動作できるCloud Run proxyで動作させます。
Cloud Run proxyは、Cloud Runサービスの認証を容易にするためのプロキシサービスです。Cloud Run 起動元ロールなどが付与されているユーザで実行すると、ローカルプロキシ経由で、CloudRunにアクセスできます。
プロダクションではIdentity-Aware Proxy(IAP)やIdentity Platform を使うと良いと思います

4. MCPクライアントの設定

私はVSCodeをつかっているので、VSCodeの設定をします。 Settings>MCPで検索>Edit in setting.json

5. 実行してみる
MCPサーバの設定が終わったので、実際にCloudRunのMCPサーバを動かしてみます

CloudRunの情報が取れており、ちゃんと動いていますね。
最後に、CloudRunのログも確認してみます。


MCPJSON-RPCでやりとりをしているので、ログにもしっかりと残っています。無事に動作しているようです。
これで、CloudRunへのデプロイとMCPサーバをつかったCloudRunの操作ができました!

ただ、MCPサーバのデプロイに関しては、公開されたDockerコンテナを配置しただけなので、
実際に自分で開発したときにどうなるの?・・・ということころも気になったので、自分で作成したMCPサーバのホスティングも試してます

オリジナルのMCPサーバをホスティングする(Pythonでもやってみる)

公式のサンプルではNotejsのMCPサーバをホスティングしていたので、PythonMCPサーバをホスティングしてみます。

PythonMCPサーバを自作する際、FastMCPが便利です。
PythonのシンプルなWebフレームワークであるFastAPIベースになっていて、APIをそのままMCPのインターフェースに置き換えることができるライブラリです。

1. 実装をする
ほぼ、チュートリアルそのままですが、こんなイメージでMCPサーバを作れます
これは単純に足し算しているだけです・・・
あとは、ClourRunで動かすためのDockerFileを準備するだけです

@mcp.tool()
def add(a: int, b: int) -> int:
    """二つの数字の足し算"""
    return a + b

if __name__ == "__main__":
    mcp.run(transport="sse", host="0.0.0.0", port=os.getenv("PORT", 8080))

2. . CloudRunにデプロイする
レジストリに登録してないので、ソースからCloudRunにアップロードします

gcloud run deploy mycloudrun --no-allow-unauthenticated  --source .

4. Cloud Run proxyを実行し、認証させ、VScodeでアクセスする

gcloud run services proxy mycloudrun --region XXXXXX`

動きました

CloudRunのログでも確認ができました

add' called with numbers '3' and '5'

やりました。これでCloudRun上でMCPサーバをホスティングできました!

TIPS

MCPサーバを開発する際、同じVScodeのWindowで作業をしていると、開発中のコードを利用してしまうことがあるので、開発とMCPサーバのテストは別WindowのVSCodeを使用することをお勧めします
MCPを明示的に指定して呼ぶのが難しい場合は、VSCodeの右下のハンマーのところをクリックして、使用するMCPサーバやToolを絞り込むと呼び出してくれやすくなります

さいごに:MCPサーバをCloudRunにホスティングする意義とは?

AzureFunctionsでもMCPホスティングできるように、サーバレス環境にMCPサーバをホスティングできるようになってきています。MCPをCloud Runのようなサーバーレス環境でホスティングすることには、実用面でも大きなメリットがあるのではないかと思っています。

メリット1:利用者の裾野を広げる
現状、MCPツールを利用するにはnpmなど専門的な開発環境の準備が必要な場合があり、非エンジニアの方にはハードルが高いのが課題です。MCPサーバーをCloud Run上でホスティングすれば、利用者はWebブラウザなどからアクセスするだけで済み、サーバーの構築や管理を意識する必要がなくなる可能性が高いと思っています(ClientもWebアプリで作成できれば)。これにより、ビジネス職の人々も手軽にLLMの連携機能を活用できるようになるのではないでしょうか?

メリット2:セキュリティの一元管理と強化
個人のPCにツールをインストールする方法では、セキュリティ対策が各々の環境に依存してしまいます。Cloud Runであれば、IAMと連携して「誰がどのツールを使えるか」というアクセス権限をサーバー側で一元的に管理できます。これにより、企業ユースでも安心して利用できるMCP基盤に1歩近づくことができるのではないかとおもっています。
※セキュリティ面では他にもさまざまな課題がありますが

おまけ
なぜか、GeminiにMCPサーバについて尋ねると、なぜかマイクラMCPについて教えてくれます。私がマイクラよくやっているせいなのでしょうか?笑

MCP (Minecraft Cloud Proxy) は、Minecraftサーバーの管理を効率化するためのプロキシサーバーです。


最後まで読んでいただき、ありがとうございました。
↓ のスターを押していただけると嬉しいです。励みになります。

私たちは一緒に働いてくれる仲間を募集しています!

電通総研 キャリア採用サイト 電通総研 新卒採用サイト

執筆:@iida.michitaka7b3a3dd24e9c454b、レビュー:寺山 輝 (@terayama.akira)
Shodoで執筆されました