こんにちは、スマートソサエティセンターの飯田です。
今回は、 Google CloudのCloud RunとMCPサーバ関連で下記の2つをご紹介します。
きっかけは、この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では書きませんが、大まかな流れを・・・。
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のログも確認してみます。

MCPはJSON-RPCでやりとりをしているので、ログにもしっかりと残っています。無事に動作しているようです。
これで、CloudRunへのデプロイとMCPサーバをつかったCloudRunの操作ができました!
ただ、MCPサーバのデプロイに関しては、公開されたDockerコンテナを配置しただけなので、
実際に自分で開発したときにどうなるの?・・・ということころも気になったので、自分で作成したMCPサーバのホスティングも試してます
オリジナルのMCPサーバをホスティングする(Pythonでもやってみる)
公式のサンプルではNotejsのMCPサーバをホスティングしていたので、PythonのMCPサーバをホスティングしてみます。
PythonでMCPサーバを自作する際、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で執筆されました)



