Cloud Run MCPサーバーをClaudeにつなぐ手順 — OAuth設定とデプロイ
Cloud RunのリモートMCPサーバー(run.googleapis.com/mcp)をClaudeのカスタムコネクタに登録し、チャットからデプロイするまでの手順です。必要なIAMロールとOAuthクライアントの作り方も扱います。
Cloud Runには、Cloud Run Admin APIを有効にすると使えるリモートMCPサーバーがあります。エンドポイントは https://run.googleapis.com/mcp で、トランスポートはStreamable HTTP、認証はOAuth 2.0です。APIキーは受け付けません。ClaudeにはGoogle Cloud側でOAuthクライアントを作り、そのIDとシークレットをカスタムコネクタに登録してつなぎます。
つなぐと、チャットから「このDockerイメージを非公開サービスとしてデプロイして」と頼めます。サービスの一覧や詳細の取得も同じ口から使えます。
ローカル版とリモート版は別物
Cloud RunのMCPサーバーには2種類あります。
| 種類 | 動く場所 | 通信 | 向く場面 |
|---|---|---|---|
| ローカル版 | 動く場所手元のマシン | 通信標準入出力(stdio) | 向く場面ローカル開発・テスト、オフライン利用 |
| リモート版 | 動く場所Googleのインフラ | 通信HTTPエンドポイント | 向く場面チームでの共有、集中的な監査ログ、権限制御 |
ローカル版はGitHubで公開されているサーバーです。この記事で扱うのはリモート版で、Cloud Run Admin APIを有効にしただけで使える状態になります。リモート版にはIAMによるきめ細かい認可、Model Armorによる入出力の検査、集中的な監査ログが付きます。
ローカル版を npx で動かす系統の手順は、gcloud MCPサーバーをClaude Codeに追加してGoogle Cloudを操作するで扱っています。
事前準備 — APIの有効化とIAMロール
先にGoogle Cloudプロジェクトを用意し、課金を有効にします。そのうえでCloud Run APIを有効にし、gcloud CLIを最新にします。
gcloud services enable run.googleapis.com
gcloud components updateデプロイまで頼むなら、利用者には次のIAMロールが必要です。付与先はMCPサーバーを使うプロジェクトです。
| 目的 | ロール |
|---|---|
| Cloud Runサービスを作る | ロールCloud Runデベロッパー(roles/run.developer) |
| サービスアカウントとして実行する | ロールサービス アカウント ユーザー(roles/iam.serviceAccountUser) |
| デプロイ元イメージのリポジトリを読む | ロールArtifact Registry読み取り(roles/artifactregistry.reader) |
| 別プロジェクトのサービスアカウントでデプロイする | ロールサービス アカウント トークン作成者(roles/iam.serviceAccountTokenCreator) |
| MCPのツールを呼ぶ | ロールMCPツール ユーザー(roles/mcp.toolUser) |
最後の roles/mcp.toolUser が見落としやすい点です。Cloud Runの権限をすべて持っていても、mcp.tools.call がなければツール呼び出しは通りません。ツールの呼び出しにはこのほか、run.prompts.get(プロンプト取得)、run.services.list、run.services.create、artifactregistry.repositories.downloadArtifacts の権限が使われます。
Google Cloud全体のMCP権限モデルはGoogle CloudのMCPサーバーをIAMで権限制御するに詳しくあります。
OAuthクライアントを作る
Claudeから接続するには、Google Cloudコンソールで「Google Auth Platform」の「クライアント」を開き、OAuthクライアントを作ります。
OAuthクライアントの作成
- 1
クライアントの作成を開く
コンソールで「Google Auth Platform > クライアント > クライアントを作成」に進みます。プロジェクトが未選択なら、作成を求められます。
- 2
アプリケーションの種類を選ぶ
種類は「ウェブ アプリケーション」にし、名前を付けます。
- 3
URIを登録する
承認済みのリダイレクトURIに
https://claude.ai/api/mcp/auth_callbackを追加します。Claude.aiから使う場合は、承認済みのJavaScript生成元にもhttps://claude.aiを追加します。 - 4
シークレットを控える
作成後に表示されるクライアントシークレットは、コピーできるのが一度きりです。紛失したらシークレットを削除して作り直します。パスワードと同じ扱いで保管します。
Cloud Runのページには、リダイレクトURIについて「独自のURIはサポートされない」とあります。アプリ側のドキュメントが指定するURIを登録する、という前提です。Claudeの場合は上の claude.ai/api/mcp/auth_callback がそれにあたります。
Claude.aiのカスタムコネクタに登録する
カスタムコネクタは、リモートMCPサーバーをつなぐClaudeの機能です。Free・Pro・Max・Team・Enterpriseの各プランで使えます。Freeは1つまでです。
個人のPro・Maxプランなら、次の順に進みます。
個人プランでの登録手順
- 1
コネクタ画面を開く
「Customize > Connectors」を開き、「+ Add」から「Add custom connector」を選びます。
- 2
名前とURLを入れる
名前は
Cloud Run、URLはhttps://run.googleapis.com/mcpです。「Continue」で進みます。 - 3
認証を選ぶ
「Authentication」で接続のしかたを選びます。「OAuth client」では「Use your own OAuth client」を選び、先ほどのクライアントIDとシークレットを入れます。
- 4
追加して接続する
「Add」で登録します。会話ごとに、チャット欄の「+」から「Connectors」で使うコネクタを切り替えます。
Cloud Runのページは、クライアントIDとシークレットを「Advanced settings」に入力するよう案内しています。Claudeのヘルプ記事には「Advanced settings」の語がなく、認証設定の「OAuth client」で「Use your own OAuth client」を選ぶ形で書かれています。画面の呼び名はClaude側の表記に合わせてください。
TeamとEnterpriseでは、組織の管理者が先に登録します。TeamはOwnerとPrimary Owner、Enterpriseはそれに加えて「Libraries」の管理権限を含むカスタムロールの持ち主が登録できます。登録は「Organization settings > Connectors」から行い、メンバーは「Customize > Connectors」で「Connect」を押して各自のGoogleアカウントで認証します。メンバー本人の権限で動くため、Cloud Runのデプロイ権限を持たない人が接続しても、デプロイは通りません。
登録後にコネクタの設定を変えたいときは、削除して入れ直す必要があります。クライアントシークレットを間違えたときも同じです。
Claudeが接続元になる点に注意
カスタムコネクタでは、ClaudeはAnthropicのクラウドからMCPサーバーへ接続します。手元の端末からは接続しません。run.googleapis.com は公開エンドポイントです。組織のポリシーでGoogle APIへのアクセスを送信元で絞っている場合は、Anthropicのクラウドから届くかを事前に確かめます。
Claude Codeからつなぐ
Cloud Runのページには、Claude CodeでもClaude.aiと同じくカスタムコネクタとして登録する手順があります。登録するリダイレクトURIは https://claude.ai/api/mcp/auth_callback で、JavaScript生成元の追加は不要です。
Claude Code自体のドキュメントには、OAuthクライアントIDを直接指定して追加する方法もあります。2つのページの記述を組み合わせた例は次のとおりです。
claude mcp add --transport http \
--client-id YOUR_CLIENT_ID --client-secret \
--callback-port 8080 --scope user \
cloud-run https://run.googleapis.com/mcp--client-secret を付けると、シークレットを伏せ字の入力で尋ねられます。追加したら、Claude Code内で /mcp を実行してブラウザでログインします。
ここには、確認しておきたい点が1つあります。Claude Codeのドキュメントは、--callback-port を指定したとき http://localhost:8080/callback の形のリダイレクトURIを事前登録する前提で書かれています。一方、Cloud Runのページが挙げるのは claude.ai/api/mcp/auth_callback だけです。直接追加でリダイレクトURIの不一致エラーになったときは、Cloud Run側が案内するカスタムコネクタ経由に切り替える選択肢があります。localhost 形式のURIをGoogleのOAuthクライアントに登録できるかどうかは、ページに記載がありません。
接続できたかは、次のコマンドで認証情報の設定状況まで確認できます。
claude mcp get cloud-run実際にデプロイを頼む
接続後は、サービス名やプロジェクトIDを含めて自然文で頼みます。Cloud Runのページが挙げている依頼文は次の3つです。
us-docker.pkg.dev/cloudrun/container/helloのイメージから、SERVICE_NAMEという非公開サービスをプロジェクトPROJECT_IDにデプロイする- プロジェクト
PROJECT_IDのサービスを一覧する REGIONリージョンにあるサービスの詳細を調べる
デプロイ元は、Artifact RegistryやDocker Hubの用意済みイメージ、ソースコード、zipファイルが挙げられています。公開サービスにするか非公開にするかと、環境変数も指定できます。
最初の1回は、公開サンプルイメージ(hello)を非公開でデプロイして試すと、権限不足を安全に洗い出せます。ここで mcp.tools.call や run.services.create の権限エラーが出れば、前の節のロールを見直す合図です。
/deployプロンプトはプレビュー
作業ディレクトリの内容をそのままデプロイする /deploy プロンプトもあります。プレビュー機能で、「現状のまま提供」の扱いとされています。形式は次のとおりです。
/deploy SERVICE_NAME \
--project PROJECT_ID \
--region REGIONチャットアプリによっては、ツールやプロンプトのメニューをたどらないと見つからない場合があります。リージョン別のエンドポイント(https://run.REGION.rep.googleapis.com/mcp)もプレビューです。
権限を絞って事故を防ぐ
デプロイを頼める状態は、ClaudeがGoogle Cloudの本番を書き換えられる状態でもあります。Cloud Runのページは、次の設定を挙げています。
接続後に効く4つの絞り込み
読み取り専用のスコープ
OAuthスコープは
https://www.googleapis.com/auth/run.readonly(読み取りのみ)とhttps://www.googleapis.com/auth/run(読み書き)の2つです。調査用の接続なら前者にします。エージェント専用のID
人間のアカウントと分けたIDを作ると、権限を絞れて、MCP経由の操作を監査ログで見分けられます。Cloud Runのページ自体が、この構成を推奨しています。
IAMのdenyポリシー
プリンシパル、ツールの読み取り専用属性、サービス名・ツール名、OAuthクライアントIDを条件に、MCPの利用を許可・拒否できます。
Model Armor
プロジェクトのフロア設定でMCPの入出力を検査し、条件に合うものをブロックします。
Model Armorには注意点があります。ログを有効にすると、ペイロード全体が記録され、機微な情報がログに残る可能性があります。Model Armorが対応していないリージョンでMCPサーバーを使うと、呼び出しのルーティングが変わり、データレジデンシーの要件を満たせなくなることもあります。
また、自社の運用で「書き込み系は人が承認する」と決めている場合は、Claude側の設定でも補えます。Claudeのコネクタ画面では、会話ごとに不要なツールを無効にでき、ツール実行のたびに承認を求められます。「Allow always」は、無人で動かして構わないと判断できるツールだけに使います。Research機能でカスタムコネクタを使うときは、承認なしでツールが呼ばれるので、書き込み系のツールを先に無効にします。
つまずきやすい点
落とし穴
ロールは足りているのに「権限がない」と言われる
roles/mcp.toolUser が付いていないのが典型です。Cloud Runの編集権限とは別に、MCPのツールを呼ぶための権限が要ります。
落とし穴
リダイレクトURIの不一致で認証が止まる
登録したURIと、クライアントが送るURIが完全一致していないと拒否されます。ClaudeのコネクタではClaude側のURI(claude.ai/api/mcp/auth_callback)を、Claude.aiのときは生成元(https://claude.ai)も合わせて登録します。
落とし穴
クライアントシークレットを失くした
シークレットは作成直後の一度しかコピーできません。削除して新しく作り、Claude側のコネクタも削除して入れ直します。
落とし穴
ツール一覧だけ先に見たい
tools/list の呼び出しは、認証なしで通ります。どのツールがあるかは、接続前にcurlやMCP inspectorで確かめられます。ツール一覧の取得に使うヘッダーには、MCP-Protocol-Version と Mcp-Method が含まれます。
MCPの仕様は2026-07-28版でステートレスに変わり、initialize のやり取りや Mcp-Session-Id が要らなくなりました。各リクエストが必要な情報をヘッダーまたは _meta に持ちます。Cloud Runのリモートサーバーはこの仕様に沿っているため、tools/list の例でもヘッダーでメソッドを指定します。ヘッダー必須化の背景はMCPでMcp-MethodとMcp-Nameヘッダーが必須になった理由にまとめています。
まとめ
つなぐ順序は、Cloud Run APIの有効化、IAMロールの付与(roles/mcp.toolUser を含む)、ウェブアプリケーション型のOAuthクライアント作成、Claudeのカスタムコネクタ登録です。リダイレクトURIは https://claude.ai/api/mcp/auth_callback で、Claude.aiだけ https://claude.ai の生成元も要ります。
最初の接続は、読み取りスコープと公開サンプルイメージの非公開デプロイで試すと、本番を触らずに権限の過不足が分かります。
他社のデプロイ系MCPと比べるなら、Cloudflare MCPサーバーの接続手順と一覧とHeroku MCPサーバーでのデプロイとスケーリングがあります。