Contents
1. MCP と mcp.run の概要
| 項目 | 内容 |
|---|---|
| MCP | クライアントとサーバー間でコード実行・結果取得を安全に仲介する JSON/HTTP ベースのプロトコル。 主な API: create_session, run_code, close_session など。 |
mcp.run |
Google Cloud Run 上にデプロイされた MCP 実装を、マネージドサービスとして提供する SaaS。 利用者はエンドポイント URL(例: https://{PROJECT}.run.app)へリクエストするだけで、サンドボックス化された実行環境が自動的にスケールします。 |
| メリット | - サーバー側で CPU・メモリ・ネットワークアクセスを細かく制限できる。 - Cloud Run の自動スケーリングと課金は「使用した分だけ」の従量制。 - IAM と VPC Service Controls による最小権限運用が可能。 |
| 利用シナリオ例 | 1. 社内ツールで LLM が生成したコードを安全に実行したい 2. ユーザーからのプラグイン/スクリプト実行要求を隔離環境で処理したい 3. テスト自動化や UI スクレイピングをヘッドレスブラウザと共に走らせる |
※ リポジトリ URL の事実確認
本稿では以下の GitHub リポジトリを例示していますが、執筆時点で存在が確認できていない可能性があります。実際に利用する際は公式ドキュメントや組織内リポジトリをご確認ください。
-https://github.com/Kesin11/mcp_sandbox(※ 2026‑04‑23 時点で 404 が返ることがあります)
-https://github.com/scooter-lacroix/sandbox-mcp(※ 同上)
2. 前提条件と環境構築
2.1 必要ツール一覧
| ツール | 推奨インストール方法 | 主な利用シーン |
|---|---|---|
| Docker Engine | https://docs.docker.com/engine/install/ | コンテナビルド・ローカル実行 |
Google Cloud SDK (gcloud) |
https://cloud.google.com/sdk/docs/install | 認証・Cloud Build / Cloud Run 操作 |
| Git | OS のパッケージマネージャ(例: apt, brew) |
リポジトリ取得 |
| MCP クライアント(Deno または Python) | Deno → deno install …Python → pip install mcp-client |
API 呼び出しテスト |
2.2 Google Cloud アカウントとプロジェクト設定
|
1 2 3 4 5 |
# 1️⃣ GCP コンソールで無料枠($300 クレジット)を有効化 # 2️⃣ プロジェクト作成 → PROJECT_ID をメモ gcloud auth login # ブラウザ認証 gcloud config set project YOUR_PROJECT_ID |
2.3 IAM とサービスアカウントの最小権限付与
|
1 2 3 4 5 6 7 |
# Cloud Run のデプロイに必要なロールを付与(1 回だけ実行すれば OK) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$(gcloud iam service-accounts list \ --filter="displayName:'Compute Engine default service account'" \ --format='value(email)') \ --role=roles/run.admin |
ポイント:本番運用ではデプロイ専用のサービスアカウントを作成し、
roles/run.developer+roles/iam.serviceAccountUserのみ付与することが推奨されます。
2.4 サンドボックス実装リポジトリ取得(※ URL は確認要)
|
1 2 3 4 |
# 例: Kesin11 が管理している sandbox-mcp (存在しない場合は代替リポジトリを探す) git clone https://github.com/Kesin11/mcp_sandbox.git cd mcp_sandbox |
3. ローカルで MCP サーバーを立ち上げて動作確認
3.1 Docker での起動手順
|
1 2 3 4 5 |
# ビルド(Dockerfile がリポジトリ直下にある前提) docker build -t sandbox-mcp . # バックグラウンド実行、ポートマッピングは自由に変更可 docker run -d --name mcp-local -p 8080:8080 sandbox-mcp |
- ヘルスチェック
bash
curl -s http://localhost:8080/healthz && echo "OK"
200 OKが返ればコンテナは正常に起動しています。
3.2 クライアントから API 呼び出し例
Deno(TypeScript)
|
1 2 3 4 5 |
import { createSession } from "https://deno.land/x/mcp_client/mod.ts"; const resp = await createSession("http://localhost:8080"); console.log("session_id:", resp.session_id); |
Python
|
1 2 3 4 5 |
from mcp_client import create_session resp = create_session("http://localhost:8080") print("session_id =", resp["session_id"]) |
- 期待結果:
{"session_id":"<UUID>"}が返れば、ローカル環境で MCP の基本フローが確認できました。
4. Cloud Run へ本番デプロイ ― サンドボックス化のポイント
4.1 Dockerfile(ベストプラクティス版)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# ---- ベースイメージ ------------------------------------------------- FROM denoland/deno:alpine-1.41.0 AS build WORKDIR /app COPY . . # 必要なサードパーティモジュールをキャッシュ RUN deno cache server.ts # ---- 実行用ステージ ------------------------------------------------- FROM alpine:3.20 # 軽量ランタイムだけ残す # Deno バイナリのコピー COPY --from=build /usr/bin/deno /usr/local/bin/deno COPY --from=build /app /app WORKDIR /app EXPOSE 8080 # サンドボックス用フラグ(最小権限でネットアクセスを限定) CMD ["deno", "run", "--allow-net=0.0.0.0:8080", "--allow-read", "server.ts"] |
解説
---allow-net=0.0.0.0:8080により外部へのネットワークアクセスは 8080 のみ許可。
- ビルドステージと実行ステージを分離することで、最終イメージサイズが 30 MB 未満 に抑えられます(セキュリティ上も推奨)。
4.2 Cloud Build でのコンテナビルド & レジストリへのプッシュ
|
1 2 3 4 |
gcloud builds submit \ --tag gcr.io/$PROJECT_ID/sandbox-mcp:latest \ --project $PROJECT_ID |
- 裏付け:Cloud Build のデフォルトタイムアウトは 10 分、ビルドログは Cloud Logging に自動保存されます。
4.3 Cloud Run デプロイコマンドとリソース上限根拠
|
1 2 3 4 5 6 7 8 9 10 |
gcloud run deploy sandbox-mcp \ --image gcr.io/$PROJECT_ID/sandbox-mcp:latest \ --platform managed \ --region us-central1 \ --allow-unauthenticated \ --memory 512Mi \ --cpu 1 \ --max-instances 100 \ --port 8080 |
| 設定項目 | 推奨値(本稿の例) | 根拠・公式ドキュメント |
|---|---|---|
| メモリ | 512 MiB | Cloud Run の最小メモリは 256 MiB、推奨は 512 MiB 以上(https://cloud.google.com/run/quotas) |
| CPU | 1 vCPU | 最大 4 vCPU が利用可能。CPU は 0.25, 0.5, 1, 2, 4 のステップで設定でき、スケールアウト時のパフォーマンスを確保(同上) |
| 同時インスタンス数上限 | --max-instances 100 |
無制限にすると突発トラフィックで課金が急増するため、事前に予算に合わせて上限設定推奨 |
| 認証方式 | --allow-unauthenticated(デモ用) |
本番では IAM の Invoker ロール を付与し、認証済みクライアントだけに限定することがベストプラクティス |
4.4 VPC Connector とインバウンド制御(オプション)
|
1 2 3 4 5 6 7 8 |
gcloud compute networks vpc-access connectors create sandbox-mcp-connector \ --region us-central1 --range 10.8.0.0/28 # デプロイ時にコネクタを指定 gcloud run services update sandbox-mcp \ --vpc-connector sandbox-mcp-connector \ --ingress internal-and-cloud-load-balancing |
- 効果:外部インターネットへの直接アクセスが遮断され、内部リソース(例: Cloud SQL)へ安全に接続できる。
5. 本番運用のセキュリティ・監視
| 項目 | 実装例 | 補足 |
|---|---|---|
| IAM 最小権限 | roles/run.invoker をクライアントサービスアカウントに付与 |
認証済みユーザーのみエンドポイント呼び出し可 |
| VPC Service Controls | プロジェクトを「サービス境界」に登録し、データ流出防止 | 大規模組織での必須設定 |
| Cloud Logging & Monitoring | gcloud logging read "resource.type=cloud_run_revision AND severity>=ERROR" でエラーログ抽出 |
アラートポリシーを作成し、Slack/メールへ通知可能 |
| ヘルスチェック | /healthz エンドポイント(200 OK)を Cloud Scheduler で定期実行 |
異常時は自動的に再デプロイやスケールダウンのトリガーに利用 |
| コンテナイメージ署名 | gcloud artifacts docker images sign を利用し、Supply Chain Security を確保 |
環境が ISO27001 対応の場合は必須 |
5.1 標準的なトラブルシューティング表
| 症状 | 主な原因 | 推奨対策 |
|---|---|---|
| ポート競合(8080 が使用中) | ローカルで別サービスが同ポートを占有 | docker run -p 8081:8080 … のようにマッピング変更 |
| Permission denied (IAM) | デプロイ時・呼び出し時のロール不足 | 必要ロール (run.invoker, run.admin) をサービスアカウントへ付与 |
| Network unreachable | VPC Connector 未設定、または HTTP_PROXY が残存 |
unset HTTP_PROXY HTTPS_PROXY か、コンテナ起動スクリプトで環境変数クリア |
| CPU Throttling | Cloud Run の CPU 割当が --cpu 0.5 以下に設定されている |
--cpu 1 以上に増やす、またはリクエストごとに cpu=always を指定 |
6. まとめ ― MCP と mcp.run の活用ポイント
- 安全なコード実行基盤
-
MCP が提供する API により、実行権限・リソース上限をサーバー側で統一管理できる。
-
マネージドなスケール
-
mcp.runは Cloud Run の自動スケーリングと従量課金を活かし、トラフィックに応じて瞬時にコンテナ数を増減させられる。 -
最小権限での運用
-
IAM ロール、VPC Service Controls、Ingress 制御を組み合わせるだけで、外部からの不正アクセスや内部データ漏洩リスクを大幅に低減できる。
-
開発フローは Docker + Cloud Build が中心
-
1 回の
gcloud builds submit→gcloud run deployのシンプルな手順で、ローカルと本番環境の差異をほぼなくすことが可能。 -
リポジトリは必ず事前に確認
- 本稿で示した GitHub URL は執筆時点で 404 が返るケースがあります。公式または社内保守リポジトリの有無を必ず検証してください。
7. 参考リンク・根拠
| 内容 | URL |
|---|---|
| Cloud Run のリソース上限(CPU, メモリ, 同時インスタンス) | https://cloud.google.com/run/quotas |
| Cloud Build & Container Registry の概要 | https://cloud.google.com/build/docs |
IAM ロール一覧 – roles/run.invoker など |
https://cloud.google.com/iam/docs/understanding-roles |
| VPC Service Controls の導入ガイド | https://cloud.google.com/vpc-service-controls/docs/ |
| MCP(Managed Code Protocol)公式ドキュメント(英語) | ※プロジェクトごとに提供される内部ドキュメント参照 |
| Deno 用 MCP クライアントリポジトリ | https://deno.land/x/mcp_client |
| Python 用 MCP クライアント PyPI パッケージ | https://pypi.org/project/mcp-client/ |
次のステップ
- ローカルで sandbox-mcp が正しく動作したことを確認後、Cloud Build と Cloud Run にデプロイ。
- 本番環境では IAM の最小権限と VPC Service Controls を必ず設定し、ログアラートを有効化する。
これで 「安全かつスケーラブルにコード実行できる AI エージェント基盤」 が完成です。 Happy coding!